C〓〓の伝値の方式は異なったプログラムのフォーム間の通信の実例を実現します。
Form 2のAccept Changeボタンを押すと、Form 1のListBoxの対応する列の値を変更する必要があるので、Form 1のListBoxコントロールをパラメータとしてForm 2に導入することも考えられます。すべての修正作業はForm 2で行われます。この考え方によると、Form 2コードは以下の通りです。
publicpartial class Form2 : Form
{
private string text;
private ListBox lb;
private int index;
// : ,ListBox ,
public Form2(string text,ListBox lb,int index)
{
this.text = text;
this.lb = lb;
this.index = index;
InitializeComponent();
this.textBox1.Text = text;
}
private void btnChange_Click(object sender, EventArgs e)
{
string text = this.textBox1.Text;
this.lb.Items.RemoveAt(index);
this.lb.Items.Insert(index, text);
this.Close();
}
}
Form 1のnewフォーム2にはこう書きます。
public partial class Form1 :Form
{
int index = 0;
string text = null;
public Form1()
{
InitializeComponent();
}
private void listBox1_SelectedIndexChanged(object sender, EventArgse)
{
if (this.listBox1.SelectedItem != null)
{
text = this.listBox1.SelectedItem.ToString();
index = this.listBox1.SelectedIndex;
// Form2
Form2 form2 = new Form2(text, listBox1, index);
form2.ShowDialog();
}
}
OKです。このようにするメリットは直観で、何かを必要としたら何かを伝えることです。欠点も明らかです。もしフォーム1で修正が必要なのは百コントロールです。構造の時には100個のパラメータを伝えますか?さらに、他のフォームがまだForm 2を弾く必要がある場合は、フォーム1のみが使用できます。