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のみが使用できます。