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中的textBox1為public公有屬性.同樣的道理,如果想顯示Form1中的其他控制元件(如dataGridView)、自定義變數或函式,只需要它宣告為public即可子呼叫.
3.在Form2子對話方塊中例項一個Form1主對話方塊,並直接對其主視窗進行修改.需要修改Form2的建構函式來呼叫Form1的public內容.
其中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/)
相關文章
- C#|.net core 基礎 - 值傳遞 vs 引用傳遞C#
- c#中的模態對話方塊和非模態對話方塊C#
- C#引數傳遞之值引數C#
- C# MessageBox 訊息對話方塊C#
- 知識論(一): 知識傳遞
- 對話方塊函式函式
- 登入對話方塊
- C# 基礎知識系列-13 常見類庫(三)C#
- JAVA基礎之-引數傳遞Java
- JavaSE基礎知識分享(三)Java
- [MFC]選擇目錄對話方塊和選擇檔案對話方塊
- InstallShield自定義對話方塊淺談(三) (轉)
- flutter demo (四):對話方塊Flutter
- Javascript檔案對話方塊JavaScript
- 基於背景知識的對話模型模型
- 區塊鏈基礎知識問答區塊鏈
- 三、Slony-I 基礎知識
- React中的模式對話方塊React模式
- 在 Flutter 使用 GetX 對話方塊Flutter
- Qt 對話方塊新增工具欄QT
- 如何自學qt(4)——對話方塊QT
- QT 等待對話方塊/進度QT
- android 多項對話方塊Android
- Android Dialog對話方塊Android
- DialogPane對話方塊佈局
- JS的方法引數傳遞(按值傳遞)JS
- 1.3 基礎知識——GP2.1 方針(Policy)
- Java基礎知識整理之程式碼塊Java
- 程式必備區塊鏈基礎知識區塊鏈
- 視窗和對話方塊居中對齊
- VUE:點選開啟的對話方塊外面時,對話方塊總是被關閉Vue
- Js基礎知識(一) – 變數JS變數
- 遊戲基礎知識——話癆角色的設計遊戲
- 電話撥號上網的基礎知識
- Golang 基礎之併發知識 (三)Golang
- 快速掌握JavaScript面試基礎知識(三)JavaScript面試
- oracle spatial之基礎知識之三Oracle
- 【數字影象處理】四.MFC對話方塊繪製灰度直方圖直方圖