c# 学习笔记 (2) 窗体之间互相调用的方法
生活随笔
收集整理的這篇文章主要介紹了
c# 学习笔记 (2) 窗体之间互相调用的方法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
c# 學習筆記 (2) 窗體之間互相調用的方法
創建一個winform工程
創建兩個窗體
一個子窗體,一個父窗體,這里為了演示,子窗體和父窗體上都有一個文本框和按鍵,點擊任意一個窗體上的按鍵,窗體上文本框的內容會同步到另外一個窗體的文本框上。
添加控件textbox和button,然后雙擊button,添加按鍵單擊事件,子窗體類似。
父窗體向子窗體傳值
最常見的方法就是子窗體中創建一個public方法,在父窗體中調用該方法將參數傳遞給子窗體
子窗體中聲明一個txbPrint方法,將接收到的str顯示在子窗體文本框內
public void txbPrint(string str){txbInfo.Text = str;}父窗體
FormChild formChild = new FormChild();private void FormMain_Load(object sender, EventArgs e){formChild.Show();}private void btnSend_Click(object sender, EventArgs e){formChild.txbPrint(txbInfo.Text);}子窗體向父窗體傳值
方法一 通過靜態字段傳值
- 像上面父窗體向子窗體傳值一樣,子窗體也可以通過類似的方法向父窗體傳值,不過一般不要這樣用,會破壞代碼封裝性,別人看了會嫌棄的
在主窗體中添加一個靜態字段,窗體加載時將this指針賦值給formMain,然后在子窗體中就可以通過靜態字段formMain操作類中的public方法
//主窗體public partial class FormMain : Form{public static FormMain formMain;public FormMain(){InitializeComponent();}FormChild formChild = new FormChild();private void FormMain_Load(object sender, EventArgs e){formMain = this;formChild.Show();}private void btnSend_Click(object sender, EventArgs e){formChild.txbPrint(txbInfo.Text);}}//子窗體public partial class FormChild : Form{public FormChild(){InitializeComponent();}public void txbPrint(string str){txbInfo.Text = str;}private void btnSend_Click(object sender, EventArgs e){//通過靜態字段傳值FormMain.formMain.txbPrint("txbInfo.Text");}}方法二 通過委托傳值
- 個人感覺C# 中的委托和C語言中的指針函數有點類似。
- 通過委托傳值,首先聲明一個委托類 本例子中 public delegate void SendLogDelegate(string str); 這個委托類可以生成 參數是string類型 沒有返回值的委托,和C語言中聲明指針函數類似
- 然后通過這個委托類在子窗體中實例化一個委托 public SendLogDelegate sendLogDelegate;
- 最后在主窗體中,實例化子窗體時,給委托 sendLogDelegate 賦值 txbPrint
- 然后在子窗體中使用該委托,就相當于調用了主窗體中的 txbPrint函數
方法三 傳遞簡單參數
- 一些情況下,主窗體僅需要獲取子窗體關閉后的一些簡單狀態,如true或者false,這里可以使用窗體中的自帶的字段來解決 this.DialogResult ,這個一般用在關閉子窗體時,修改子窗體的 this.DialogResult ,然后在主窗體中檢查子窗體的 DialogResult 來傳遞參數,用的不多。
總結
以上是生活随笔為你收集整理的c# 学习笔记 (2) 窗体之间互相调用的方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c# 学习笔记 (1) 类型转换
- 下一篇: c# 学习笔记 (3) 窗体单例模式