子窗體與父窗體間的傳值 用委託實現

2022-02-10 21:20:35 字數 2214 閱讀 3400

這2天因為需要做winform程式,需要把asp的乙個庫存異動功能模組轉成winform程式,所以就遇見了窗體之間傳值的這種情況 ,以前在肇慶上班的時候也做過這樣的情形,當時還是初始做winfom程式,主要是機器通訊方面的,和單件模式聯絡比較密切。時隔差不多4個月,真的快忘記了,居然有開始做這個,所以沒辦法,只好還是又開始學習了。當時技術經理給我講委託,事件的時候我是理解了個大概,算是囫圇吞棗吧,沒啃明白。現在自己花了點時間,自己做了個demo出來,然後再套用到實際的開發環境中,雖然這套用的過程當中確實出現了很多問題,是我無法預料的,也許就是自己的基礎還不牢靠,大腦的短路或者意識形態比較模糊,沒想起一些基本的概念,導致自己傳值總是失敗,反正就是子傳給父的時候,父窗體就是無法顯示想要的資料。自己做的demo反而還可以顯示,很是奇怪,但我自己也知道問題就是出在父窗體的建構函式中,一直都沒把建構函式和例項進行緊密的聯絡。導致我自己傳值總是失敗。

在這裡我主要有三個winform窗體,第乙個是mainparent,第二個是childform,第三個是thirdform,mainparen開啟childform,childform開啟thirdform,並且現在我有一實體類,姑且定義為使用者資訊類(userinfo)見下圖:

首先我在我的 第三個窗體裡定義委託,以及委託事件,

而我需要在第2個窗體childform接收第三個窗體觸發的事件,然後根據事件,給需要的值進行資料填充。

**如下:

**

using

system;

using

system.collections.generic;

using

system.componentmodel;

using

system.data;

using

system.drawing;

using

system.text;

using

system.windows.forms;

namespace

winformsendvalue

private

void

button1_click(

object

sender, eventargs e)

this

.visible

=false;}

}}

上面的**就是在窗體三中定義的委託和事件,以及事件何時觸發引起傳值。

接著需要在窗體2中獲取窗體三中傳遞過來的值,就必須訂閱事件,然後自身進行事件觸發後的條件函式引用等。

廢話不多說,請見**:

using

system;

using

system.collections.generic;

using

system.componentmodel;

using

system.data;

using

system.drawing;

using

system.text;

using

system.windows.forms;

namespace

winformsendvalue

public

childform(

string

aa)public

childform(userinfo userinfo)

//////

事件觸發的委託函式宣告

//////

private

void

setvalue(userinfo userinfo)

private

void

button1_click(

object

sender, eventargs e)}}

此時就已經完全產生的子傳給父窗體的值。特別需要在窗體2中,啟用窗體3例項的時候,就是點選按鈕彈出視窗三的時候,必須與事件訂閱者是乙個例項,否則例項不同,子無法傳給先前的父例項,這裡是切記需要注意的地方。

private

thirdform thirdfrm

=new

thirdform("aa

");這句和按鈕事件中的例項必須是乙個,否則無法接收事件。

關於父傳給子的值傳遞相對來說比較簡單,什麼公有變數,公有靜態變數,建構函式傳參等也是一種辦法。

窗體間傳值 ,子窗體傳給父窗體

第一種方法 將form1整個窗體作為值傳給form2 form1 button1彈出 from2,from2 numericupdown1的值改變,使form1 textbox1的值改變。form1 第一種方法 將整個窗體作為值傳給form2 private void button1 click o...

C WinForm 父窗體 子窗體 傳值

本次示例效果如下 form1為父窗體 包含textbox1 button1 form2為子窗體 包含textbox2 button2 父窗體給子窗體傳值 1.點選form1的button1 開啟form2 父窗體給子窗體傳值 可以呼叫過載子窗體的建構函式 直接傳入相關數值 public partia...

C 父窗體與子窗體之間委託

先例項化子窗體jobform,然後讓 jobform.transfevent job transfevent 顯示子窗體 if jobform.dialogresult dialogresult.ok return thisjob.jobname jobnamebx.text 判斷子窗體是否點選確定...