閱讀549 返回首頁    go 魔獸


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

在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論壇中我也見到一些這樣的討論https://bbs.csdn.net/topics/320241861

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

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

最後更新:2017-04-03 15:21:44

  上一篇:go 瀏覽器安全問題分析
  下一篇:go Xcode裏一個快速注釋的腳本