Winform開發之窗體傳值

Winform的窗體之間的數據傳遞是開發的必備技術,下面介紹幾種典型的傳值方法緩存

一、構造函數傳值,但這種方法是單向的(推薦)函數

上代碼,先傳值this

1 private void button2_Click(object sender, EventArgs e)
2         {
3             Form3 fr3 = new Form3("要傳的值啊");
4             fr3.ShowDialog();
5         }

接值,對了,這裏須要重載一個Form3的構造函數,而後將拿到的值顯示出來spa

1 public Form3(string canshu)
2         {
3             InitializeComponent();
4             label1.Text = canshu;
5         }

效果圖,就是這麼簡單code

二、靜態變量傳值(不推薦)orm

能夠將靜態變量申明在你須要的地方,好比一個單獨類,或者Form中,好比咱們在這裏申明在Form2中對象

 public static string xvalue;
1 private void button2_Click(object sender, EventArgs e)
2         {
3             xvalue = "要傳的值啊xvalue";
4             Form3 fr3 = new Form3();
5             fr3.ShowDialog();
6         }

先給賦值,而後在Form3中取值blog

1 public Form3()
2         {
3             InitializeComponent();
4             label1.Text = Form2.xvalue;//Form2實際也是個class,直接取靜態值便可,若是靜態變量xvalue定義在其餘類中,即將Form2替換便可            
5         }

效果圖上事件

三、經過共有屬性傳值開發

首先在要打開的Form中建立一個共有屬性,而後在調用窗口賦值便可。好比下面Form2啓動Form3,即給Form3的yvalue傳值

(1)在Form3中定義共有屬性

 1 public string yvalue {
 2             get 
 3             {
 4                 return label1.Text.ToString();
 5             }
 6             set 
 7             {
 8                 label1.Text = value;
 9             }
10         }

(2)Form2中啓動Form3,並傳值

1 private void button2_Click(object sender, EventArgs e)
2         {           
3             Form3 fr3 = new Form3();
4             fr3.yvalue = "要傳的值啊";
5             fr3.ShowDialog();
6         }

四、經過Owner屬性傳值

(1)在調用者Form2中申明一個公有變量,並賦值,設置須要啓動的Form3的Owner

1 public string xvalue;
2         private void button2_Click(object sender, EventArgs e)
3         {
4             xvalue = "Form2要傳的值";
5             Form3 fr3 = new Form3();
6             fr3.Owner = this;
7             fr3.ShowDialog();
8         }

(2)啓動窗體Form3中取值

1 private void Form3_Load(object sender, EventArgs e)
2         {
3             Form2 fr2 = (Form2)this.Owner;
4             label1.Text = fr2.xvalue;
5         }

這種方法實際是將Form2傳給了Form3,所以Form3能夠取到Form2的全部公有變量和屬性。

五、委託傳值(推薦)

委託傳值主要用在子窗體給父窗體傳值上,即上文的Form3給Form2傳值

(1)先在Form3中申明委託

1 public delegate void PutHandler(string text);
2         public PutHandler putTextHandler;//委託對象
3         private void button1_Click(object sender, EventArgs e)
4         {
5             if (putTextHandler != null)
6             {
7                 putTextHandler(textBox1.Text.ToString());
8             }
9         }

(2)在Form2中綁定委託事件

 1 public void getValue(string strV)
 2           {
 3              this.textBox1.Text = strV;
 4          }
 5        
 6         private void button1_Click(object sender, EventArgs e)
 7         {
 8             Form3 fr3 = new Form3();
 9             fr3.putTextHandler = getValue;
10             fr3.ShowDialog();          
11         }

 

 注意:

委託和事件是不同的,你最後一個示例。
if (putTextHandler != null)
{
putTextHandler(textBox1.Text.ToString());
}
上面這樣作是有bug的。
最好的作法是,是先用臨時變量緩存putTextHandler ;
而後在處理,
不然你判斷!=null成立
可是立刻在其餘地方-=的話,程序就出錯了
-=你是不知道會由誰調用的
相關文章
相關標籤/搜索