相信大家在做系統的時候,很多人都遇到需要在兩個不同的窗體間傳遞資料的情況,例如可以單獨開啟乙個視窗,用於顯示**名稱對照關係,通過雙擊該窗體的資料,我們希望這個資料傳遞到另乙個窗體中。如何實現兩個窗體間資料的實時傳遞呢?其實很簡單,只需要簡單地運用事件通知就可以了。
首先做如下假設:
有兩個窗體mainform,subform,我們希望subform向mainform實施傳遞資料,開發語言就用.net c#
1、新建乙個工程,並新增兩個窗體,分別命名為frmmain,frmsub
2、在frmmain上新增乙個文字框和乙個按鈕,分別命名txbxreceivemessagecontainer和btnopensubform
3、在frmsub上新增乙個文字框和乙個按鈕,分別命名txbxsendmessagecontainer和btnsendmessage
4、在工程中新增乙個類檔案,取名為global,用於放置一些公用**
做好了以上準備工作,下面開始編寫**,為方便大家閱讀,我把關鍵**直接貼上來。
//global.cs
public class subformeventarg : system.eventargs//事件資料,其中建構函式中的引數是object型別,也就是說我們可以在兩個窗體間傳遞任何資料,如陣列,字串,結構體以及其他任何複雜的資料形式
public object mymessage}}
public class formhandel
;//根據需要而定,如果是在三個窗體間傳遞資料的話,可以定義三個資料
}public delegate void messagechangeeventhander(object sender, subformeventarg e);//很關鍵,用於兩個窗體間互通訊息
//frmmain.cs
在frmmain建構函式中新增:
formhandel.myformhandel[0] = (int)this.handle;
新增訊息處理函式,即怎麼處理frmsum傳遞過來的資料
public void onmessagechange(object sender, form2eventarg e)
{//處理訊息(e.mymessage)的**,值得注意的是,由於e.mymessage是object型別,此處需要根據你傳遞的資料的型別進行拆箱(即我們通常所說的強制轉換),例如如果傳遞的是字串陣列,則可以string message = (string)e.mymessage,然後再處理message
this.txbxreceivemessagecontainer.text = e.mymessage.tostring();
在btnopensubform的click事件中新增frmsum的呼叫函式:
frmsub frm = new frmsub();
frm.messagechange += new messagechangeeventhander(onmessagechange);//很重要,用於註冊訊息處理函式
frm.show();
//frmsub.cs
定義乙個窗體級事件變數
public event messagechangeeventhander messagechange;
在btnsendmessage的click事件中新增訊息傳送**
messagechange(this, new subformeventarg (this.txbxsendmessagecontainer.text));
ok,所有工作完畢,編譯,執行,ok。
兩個窗體之間傳遞物件
public archiext archiidgetinfo string archiid return objext catch exception ex 比如 我在窗體a中有個查詢的結果集 根據結果集中的序號來點選修改,就顯示資料庫中相對應的內容 首先呢,我們要寫個方法返回乙個物件,public...
兩個窗體的值傳遞
目的 第乙個窗體 主窗體mainform 獲取第二個窗體 資料窗體dataform 的輸入值 方法一 推模式,主窗體公開方法!即把主窗體的例項推給資料窗體 步驟 1.主窗體新增公開方法 2.資料窗體新增帶引數的建構函式 3.資料窗體按鈕事件呼叫公開方法,傳遞使用者的輸入值 4.主窗體按鈕事件開啟資料...
兩個窗體之間的checkbox傳遞
例如有乙個窗體a 和乙個窗體b a上有乙個checkbox b 上也有乙個checkbox 執行a窗體勾選chk後調整b窗體 然後b窗體上的checkbox也被勾選上 在a窗體load事件中迴圈遍歷窗體上的checkbox 新增到list集合 a窗體listlist new list private...