C# 基礎知識 (三).主子對話方塊數值傳遞

Eastmount發表於2013-09-15

在C# winform程式設計中,我們經常會遇到不同視窗間需要傳遞數值的問題.比如資料庫的應用,主視窗填寫內容num1,點選按鈕,在彈出的子視窗顯示對應num1值;或者在子視窗填寫新註冊使用者名稱資訊,在主視窗的dataGridView動態變化顯示著新新增\修改的值;或者在修改資訊時,輸入使用者編號”000001”在對應textBox中它的相應資料.顯示如下圖所示:

以上應用都涉及到如何在兩個不同視窗間傳遞數值,並實現動態的更新,下面就介紹我請教同學學到的一種主子對話方塊數值傳遞的知識,僅供大家學習!它是非常基礎的C# winform知識,但也是非常有用的知識.

一.建立主子對話方塊

首先建立一個”Windows窗體應用程式”,然後主窗體Form1的介面如下圖,然後新增一個子視窗,右鍵解決方案中專案名稱,點選新增”,新增一個”Windows窗體應用程式”,其中名稱為”Form2.cs”介面設計如下圖所示:

點選主窗體中的”提交”按鈕,填寫如下程式碼就可實現在主窗體中呼叫子窗體的應用.它是在例項一個”Sub”的子窗體並顯示.它的執行結果就是當使用者點選"提交"按鈕時就會彈出子對話方塊Form2,這就建立了C#主子對話方塊之間呼叫的關係.

//點選"提交"按鈕
private void button1_Click(object sender, EventArgs e)
{
      Form2 Sub = new Form2();
      Sub.Show();                       //顯示子對話方塊內容
}

二.主對話方塊傳值給子對話方塊

下面需要介紹如何在子對話方塊中顯示主對話方塊中提交的內容,點選Form2空白處,生成一個Load事件,新增如下程式碼,它的具體意思是:在子對話方塊”Form1”中宣告主對話方塊”Form2”,然後在Form2的建構函式中給pall賦值pall=f1;同時在載入Load事件中把”Form2”子對話方塊中的textBox1賦值為主對話方塊中提交的值.

public partial class Form2 : Form
{
    //例項主窗體
    Form1 pall = new Form1();
    //建構函式修改
    public Form2(Form1 f1)
    {
        InitializeComponent();
        pall = f1;
    }
    //載入
    private void Form2_Load(object sender, EventArgs e)
    {
        textBox1.Text = pall.textBox1.Text;
    }
}
上面僅僅修改了子對話方塊中的內容,同時需要修改主對話方塊中的內容:
1.把主對話方塊”Form1”中的textBox1控制元件設定為public.如下圖所示.因為預設為Private(私有),只能在自己對話方塊和函式中修改,其他對話方塊要使用必須設定為public.

2.由於Form2中的建構函式變成publicForm2(Form1f1)擁有引數,所以這裡需要修改點選”提交”按鈕中函式內容如下,把主窗體傳遞給子窗體.

//點選"提交"按鈕
private void button1_Click(object sender, EventArgs e)
{
    Form2 Sub = new Form2(this);
    Sub.Show();                       //顯示子對話方塊內容
}

 最後的執行結果如下圖所示

三.子對話方塊值修改主對話方塊亦更新

實現子對話方塊中修改值,主對話方塊中的值也修改的動態更新,這能應用到很多實際專案中,比如主窗體顯示庫存資訊,子窗體新加\刪除\修改商品資訊時,主窗體也要修改.首先方法同上,建立主子對話方塊,介面如下:

總結下來就是3個步驟:
1.主窗體Form1中呼叫子窗體Form2 Form2fn2=newForm2(this);fn2.Show();
2.設定Form1中的textBox1public公有屬性.同樣的道理,如果想顯示Form1中的其他控制元件(dataGridView)、自定義變數或函式,只需要它宣告為public即可子呼叫.
3.Form2子對話方塊中例項一個Form1主對話方塊,並直接對其主視窗進行修改.需要修改Form2的建構函式來呼叫Form1public內容.
其中Form2的程式碼如下,與上面中不同的是把主對話方塊中textBox1賦值即可.
public partial class Form2 : Form
{
    Form1 pall = new Form1();
    public Form2(Form1 f1)
    {
        InitializeComponent();
        pall = f1;
    }
    //點選"提交" 內容顯示到主視窗
    private void button1_Click(object sender, EventArgs e)
    {
        pall.textBox1.Text = textBox1.Text;
    }
}

執行結果如下:

四.總結

最後在主子對話方塊中傳遞數值的方法還有很多,比如使用Static定義或使用委託,在子窗體的建構函式中新增兩個委託,一個用於呼叫主窗體給子窗體傳值的方法,一個呼叫子窗體給主窗體傳值的方法.即可實現兩個窗體間資料互動.CSDN論壇中我也見到一些這樣的討論http://bbs.csdn.net/topics/320241861

但是我還是認為我上面敘述的這種方法是非常有用的C#基礎知識介紹,我僅僅是提供一種可行的方法,希望該文章能幫助到哪些還不知道如何在主子對話方塊中傳遞數值的同學朋友,最後還是感謝我的那個同學,他告訴我的這種方法.如果有錯誤或不足之處,見諒!

(By:Eastmount 2013-9-15 夜2點http://blog.csdn.net/eastmount/) 

相關文章