1. 程式人生 > 其它 >Windows Form窗體之間傳值——委託

Windows Form窗體之間傳值——委託

  對於Form窗體之間的傳值,如果要將值從Form1傳到Form2中,最簡單的就是在Form2中宣告一個公有變數,然後在Form1中例項化Form2,然後呼叫Form2的公有變數:

    (1)首先在Form2中宣告一個共有變數:

public string str = null;

    (2)然後在Form1中例項化Form2窗體:

public Form2 form2= new Form2();

    (3)在Form1窗體中直接或者在按鈕中將值傳給Form2:

if (form2 == null || form2.IsDisposed)
{
    form2 = new
Form2(); } form2.str = "窗體1的值";

  這種方式適合從父窗體傳值到子窗體,如果是要繼續將子窗體的值傳回給父窗體,這種例項化一個窗體然後傳值的方式不太適用,因為如果是在子窗體中例項化父窗體,就相當於是新建了一個窗體,這樣就沒有辦法實現在原來的父窗體中顯示值。用委託進行傳值可以很好的解決這個問題,首先在namespace(名稱空間)中宣告public型委託,然後在子窗體中宣告一個委託事件,在子窗體中呼叫委託事件,然後在父窗體中例項化子窗體,對子窗體中呼叫的委託事件進行事件繫結,最終實現了將子窗體中的值傳到父窗體:

    (1)宣告委託:

public delegate
void TranValue(double value);

    (2)在子窗體類中宣告委託事件:

public event TranValue tranvalue;

    (3)在子窗體中呼叫委託事件:

double value;
tranvalue(value);

    (4)在父窗體中例項化子窗體,繫結委託事件:

        public Form2 form2= new Form2();
        private void DisplayToolStripMenuItem_Click(object sender, EventArgs e)
        {
            
if (form2== null || form2.IsDisposed) { form2= new Form2(); } form2.shuishen += form2_tranvalue; form2.Show(); } /// <summary> /// 委託繫結事件,讓Textbox顯示子窗體傳進來的值 /// </summary> /// <param name="Height"></param> void form2_tranvalue(string value) { Textbox.Text = value; }

  補充:兩種方法都只能是單向傳值,第一種適合將值從父窗體傳給子窗體,第二種適合將值從子窗體傳回父窗體。第二種方法如果是將值從父窗體傳回子窗體還需要子子窗體中例項化父窗體,而且還是繫結父窗體的事件,這種方法不太適合父窗體傳給子窗體。