C# Winform窗口之間傳值的多種方法淺析(轉)


摘要http://www.jb51.net/article/63837.htm

這篇文章主要介紹了C# Winform窗口之間傳值的多種方法淺析,本文起講解了通過構造器傳值、通過屬性傳遞、通過事件攜帶參數傳遞等方法,需要的朋友可以參考下

一般的工程都是多個form組成的,各個窗體之間經常要靈活的傳遞數據。下面分享一點自己的經驗:

窗體傳值的方法有很多,下面僅介紹我用過的一些,不知道官方叫這些什么方法,大家也可以找找看其他的。

通過構造器傳值

這是最簡單的一種方式,例如我從form1中要傳一個字符串去form2
首先,在form2的構造器中稍作修改:

復制代碼 代碼如下:


public Form2(String s)
{
InitializeComponent();
this.labelRecieve.Text = s;
}


添加了一個string參數 s
然后,在form1的click事件中,將要傳遞的參數傳入,如下片斷:

復制代碼 代碼如下:


private void buttonShow_Click(object sender, EventArgs e)
{

Form2 f2;
if (textBoxSend.Text == "")
{
f2 = new Form2("I'm from form1");
}
else
{
f2 = new Form2(textBoxSend.Text);
}
DialogResult r = f2.ShowDialog();//至於Show與ShowDialog就不用再說了吧

}

在觸發click事件的時候,form2就接受到f1傳過去的textBoxSend.Text或者"I'm from form1",並且用labelRecieve去承接它。
這種方法,雖然簡單方便,但是畢竟功能有限,當需要傳遞較大量的多樣的數據時,用構造器就不能勝任了。

通過屬性傳遞

屬性可以方便的傳遞多個數據(不就是添加多個屬性么?),假設我要從form2傳遞某字符串到form3,首先我們為form3添加一個屬性叫myString

復制代碼 代碼如下:


public Form3()
{
InitializeComponent();
}
public string myString
{
get
{
return this.textBoxf3.Text;
}
set
{
if (value == null)
textBoxf3.Text = string.Empty;
else
textBoxf3.Text = value;
}
}

通過該屬性去設置文本框的text.
然后,在form2的點擊事件中,只需令

復制代碼 代碼如下:


f3.myString = "I'm from form2";


這樣也很方便,值得一提的是,這樣通過屬性傳遞的時候,即可以將數據從form2船到form3又可以從form3傳回來。如

復制代碼 代碼如下:


if (r == DialogResult.OK)
{
f3.myString = "I'm from form3";
this.labelRecieve.Text = f3.myString;
//form3關閉的時候將myString保存到form2的label中。
}

屬性傳遞是最常用的一種方式。

通過事件攜帶參數傳遞

坦白說,我目前還很少用到這,准確的說這個應該叫事件結合屬性傳值。
現在我在form4里面坐了某些操作,假設form4是我們開發的類型庫的一部分,我想將它發布給其他的同事使用的時候,我們可以使用這樣的事件去傳值。
首先,在form4中,添加事件參數類型和事件處理器委托的定義:

復制代碼 代碼如下:


public class myEventArgs : EventArgs
{
string myString;
public string MyString
{
get
{
return myString;
}
set
{
if (value != null)
myString = value;
else
myString = string.Empty;
}
}

public myEventArgs(string s)
{
this.MyString = s;
}
}

//事件處理方法的委托
public delegate void myEventHandler(object sender, myEventArgs e);

然后,我們在click事件中去觸發這樣一個公共的事件myClick

復制代碼 代碼如下:


public event myEventHandler myClick;
private void buttonClick_Click(object sender, EventArgs e)
{
if (this.myClick != null)
this.myClick(this,new myEventArgs(textBox4.Text));
this.DialogResult = DialogResult.OK;
}

我們將textBox4中的文本封裝到myEventArgs這樣一個事件參數對象里面,這樣它就會隨着事件被傳到form3中,同時在form3中我們來添加一個事件處理方法,

復制代碼 代碼如下:


void f4_myClick(object sender, Form4.myEventArgs e)
{
myString = e.MyString;
this.textBoxf3.Text = String.Format("From f4: {0}",e.MyString);
}

在點擊事件中我們通過委托去調用該方法

復制代碼 代碼如下:


Form4 f4 = new Form4();
f4.myClick += new Form4.myEventHandler(f4_myClick);


在f4對象的myClick事件被觸發以后,會調用這里的f4_myClick方法,我們就可以通過該方法從事件參數中取得數據了,這里是放到textBoxf3中。

就寫到這里吧,文中描述的都是最基本的轉遞,當然傳的參數可以是各種各樣的,也可以利用泛型委托,也可以把一個FORM里面的Constrol"傳"到另外的Form里面,大家自己去發揮吧 :)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM