程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 子窗體與父窗體間的傳值--用委托實現

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

編輯:C#入門知識

這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
{
public partial class ThirdForm : Form
{
public delegate void SetValueSend(UserInfo userinfo);//定義委托
public SetValueSend sendEvent;//聲明委托類型的事件
public ThirdForm(string aa)
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
UserInfo model = new UserInfo();//實體類
model.UserName = this.textBox1.Text;
model.PassWord = this.textBox2.Text;
if (sendEvent != null)
{
sendEvent(model);
}
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 partial class ChildForm : Form
{

private ThirdForm thirdfrm = new ThirdForm("aa");
public ChildForm()
{
Initialize

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved