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

WinForm窗體間傳值的辦法

編輯:C#入門知識

WinForm窗體間傳值的辦法。本站提示廣大學習愛好者:(WinForm窗體間傳值的辦法)文章只能為提供參考,不一定能成為您想要的結果。以下是WinForm窗體間傳值的辦法正文


本文實例講述了WinForm窗體間傳值的辦法。分享給年夜家供年夜家參考。詳細完成辦法以下:

窗體間傳遞數據,不管是父窗體操作子窗體,照樣子窗體操作符窗體,有以下幾種方法:
 
1.公共靜態變量;
2.應用共有屬性;
3.應用拜托與事宜;
4.經由過程結構函數把主窗體傳遞到從窗體中;

1、經由過程靜態變量

特色:傳值是雙向的,完成簡略
 
完成代碼以下:
在一個app類中界說一個靜態成員value
public class app
{
public static string value;
}
在窗體Form1中如許挪用
app.value = "f2"; //給靜態成員賦值
new Form2 ( ).Show ( ); //顯示Form2
在窗體Form2中
this.Text = app.value; //取回app.value的值
app.value = "Form2"; //給app.value賦值,以便其他窗體挪用
 
2、公共變量傳值

這類辦法就是應用一個公共變量,先把須要的值寄存到這個公共變量,然後須要的時刻再經由過程讀取該變量的值來應用
例子
Form1:
public static string Form1Value; // 留意,必需聲名為static變量
private void button1_Click(object sender, EventArgs e)
{
Form1Value = "來自Form1";
new Form2().Show();
}
Form2:
private void Form_Load(object sender, EventArgs e)
{
MessageBox.Show(Form1.Form1Value);
}
這類方法傳值,懂得和應用上都絕對的簡略,然則輕易讓變量串值,好比第一次修正為“a”,而第二次修正為“b”,則有能夠原來須要“a”值的成果釀成了“b”。
 
3、靜態辦法方法拜訪

這類辦法與傳值辦法的第一種有些相似,就是將須要被其他窗體拜訪的辦法用static界說,以便其他傳遞可以直接拜訪到
例子:
Form1:
private void button1_Click(object sender, EventArgs e)
{
new Form2().Show();
}
public static void FF()
{
MessageBox.Show("Form1辦法");
}
Form2:
private void Form_Load(object sender, EventArgs e)
{
Form1.FF();
}
應用這類辦法拜訪其他窗體的辦法,在跨窗體上完成便利,然則須要須要拜訪到控件值則不克不及直接拜訪,須要將值先傳遞給其他窗體,再有窗體傳遞回來,或許存儲在其他變量後對這變量停止拜訪。
 
4、經由過程窗體的私有屬性值

特色:完成簡略
 
完成代碼以下:
在窗體Form2中界說一個私有屬性Form2Value,獲得和設置textBox1的文本值
public string Form2Value
{
get
{
return this.textBox1.Text;
}
set
{
this.textBox1.Text = value;
}
}
在窗體Form1中如許挪用
Form2 f2 = new Form2 ( );
f2.Form2Value = "Ok"; //給Form2的textBox1賦值Ok
f2.ShowDialog ( );
 
5、經由過程窗體的私有屬性值和Owner屬性

特色:完成簡略,靈巧
 
完成代碼以下:
在窗體Form1中
public int Form1Value = 1;
Form2 f2 = new Form2 ( );
f2.ShowDialog ( this ); //把Form1作為Form2的一切者傳遞給Form2
在窗體Form2中
//Form2的一切者是Form1
Form1 f1 = ( Form1 ) this.Owner;
//取到Form1的值是1
MessageBox.Show ( f1.Form1Value .ToString ( ) );
//給Form1的Form1Value賦值222
f1.Form1Value = 222;
 
6、經由過程窗體的私有屬性值和Application.OpenForms屬性

解釋:Application.OpenForms屬性:獲得屬於運用法式的翻開窗體的聚集。(此屬性在 .NET Framework2.0版中)
 
完成代碼以下:
在窗體Form1中
public int Form1Value = 1;
Form2 f2 = new Form2 ( );
f2.Show ( );
在窗體Form2中
string formName = "Form1";
Form fr = Application.OpenForms [ formName ];
if ( fr != null )
{
Form1 f1 = ( Form1 ) fr;
//取到Form1的值是1
MessageBox.Show ( f1.Form1Value.ToString ( ) );
//給Form1的Form1Value賦值222
f1.Form1Value = 222;
}
 
7、傳參式傳值

此辦法望文生義就是將須要的值一參數情勢傳遞給須要值的窗體
例子:
Form1:
private void button1_Click(object sender, EventArgs e)
{
new Form2("來自Form1").Show();
}
Form2:
public Form2(string value)
{
InitializeComponent();
MessageBox.Show(vaue);
}
此種窗體間傳值辦法顯著優與第一種的傳值參數,也不會湧現串數據景象,然則須要留意修正Form2的結構函數,每一個窗體的默許結構函數默許都是無參數的,是以須要去修正結構函數。
 
8、經由過程結構函數

特色:傳值是單向的(弗成以相互傳值),完成簡略
 
完成代碼以下:
在窗體Form2中
int value1;
string value2;
public Form2 ( int value1 , string value2 )
{
InitializeComponent ( );
this.value1 = value1;
this.value2 = value2;
}
在窗體Form1中如許挪用
new Form2 ( 111 , "222" ).Show ( ); //如許就把111,"222",這2個值傳送給了Form2
 
9、用拜托來完成。

拜托可以把一個辦法作為參數帶入另外一個辦法,在窗體傳值中,子窗體須要履行一個辦法來轉變父窗體的值,
而這個辦法,則可以用拜托從父窗體傳遞過去。在父窗體中,聲明修正文本框的辦法AfterChildChange,在new一個子窗體的時刻,將這個辦法傳遞給子窗體。那末當子窗體點擊同步按鈕時,會履行父窗體的AfterChildChange辦法,已到達修正文本框值的目標。
 
例子
1、在子窗體中設置一個拜托類型的屬性:
public Action<string> AfterChangeTextDel { get; set; }
2、在子窗體同步按鈕中:
if (AfterChangeTextDel != null)
{
AfterChangeTextDel(this.textBox1.Text);//履行拜托
}
3、在父窗體中添加辦法:
public void AfterChildChange(string text)
{
txtName.Text = text;
}
4、在父窗體啟動子窗體按鈕:
ChildFrm frm =new ChildFrm();
frm.AfterChangeTextDel = new Action<string>(this.AfterChildChange);
frm.Show();
5、如許也能完成窗體傳值,子窗體的拜托可以在父窗體 其他處所可以停止直接履行。:處理此成績。微軟引入了事宜。
 
10、用事宜來完成

事宜是拜托類型的對象。它外部是用拜托來完成的,關於事宜來講,內部只能注冊本身+=,刊出本身-=,外界弗成以刊出其他的注冊者,也不克不及自動觸發事宜。而拜托則沒法完成這些掌握,是以出生了事宜這話總語法。
 
完成代碼以下
在窗體Form2中界說私有屬性Form2Value,獲得和設置textBox1的文本值
而且還界說一個accept事宜
public string Form2Value
{
get
{
return this.textBox1.Text;
}
set
{
this.textBox1.Text = value;
}
}
public event EventHandler accept;
 
private void button1_Click ( object sender , EventArgs e )
{
if ( accept != null )
{
accept ( this , EventArgs.Empty ); //當窗體觸發事宜,傳遞本身援用
}
}
在窗體Form1中
Form2 f2 = new Form2 ( );
f2.accept += new EventHandler ( f2_accept );
f2.Show ( );
void f2_accept ( object sender , EventArgs e )
{
//事宜的吸收者經由過程一個簡略的類型轉換獲得Form2的援用
Form2 f2 = (Form2) sender;
//吸收到Form2的textBox1.Text
this.textBox1.Text = f2.Form2Value;
}

願望本文所述對年夜家的C#法式設計有所贊助。

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