幾句廢話一下(#^.^#):
很少寫VS平臺下應用開發的文章,主要平時用的少,還是以嵌入式開發爲主,這也算我的第一篇這樣類型文章,O(∩_∩)O哈哈~。開發中遇到問題解決了,就應該記錄下來和大佬們分享,而且關於“C# winform中的不同form之間通信與調用”的問題是開發中比較常見的,想必很多人會經常遇到。。
————————這是一條進入正題的嚴肅分割線(#^.^#)—————————
一.實驗內容
文章關鍵內容就是兩個form間的數據通信和調用。
其中form1下點擊button1按鈕啓動form6,同時form1下將變量數據傳進form6中使用,並調用form6裏的函數。
二.代碼實現
1.form1下代碼
下面是定義一Form6的f6對象,和書寫兩form的數據傳遞函數
private Form6 f6 =new Form6();//定義一f6對象
string data = "Isform1";
/******************
函數名:f1_to_f6()
功能:f1下傳遞數據給f6,並調用f6的函數
*******************/
private f1_to_f6(void)
{
f6.yValues = data; //傳遞的數據給f6下的yValues
f6.Test(); //調用f6下的Test函數
}
——————————下面部分畫重點———————————————
啓動Form6窗體函數(f1下button1點擊函數):該部分是這篇文章問題的難點。想必很多人在按鈕點擊函數裏就直接採用:f6.Show()啓動form6窗體,第一次啓動確實可以使用,但是form6窗體關閉後,再點擊按鈕啓動,程序就會報錯了:“無法訪問已釋放的對象”。
爲什麼呢?因爲點擊button1打開的form6窗體就指向了程序裏f6這個對象,當form6窗體關閉後,在這個對象就被釋放,當再次執行f6.Show()時,程序找不到這個f6對象,就報錯了。
應該怎麼解決?既然點擊按鈕找不到釋放的f6,那可不可以按鈕裏再新建一個form6的窗體對象呢?比如代碼改寫成:Form6 RH = new Form6(); RH.Show();
試了下確實可以,但是,f1_to_f6()函數裏的f1到f6的消息無法傳遞了,因爲這個f6對象不同等這個新建的RH 對象,而開啓的Form6 窗體卻是指向RH這個對象,所以Form6 窗體裏看不到f1傳遞過來的值。
那麼,可以在代碼裏再加句: f6 = RH;使得f6和RH等同,這樣Form6 窗體也可以指向f6這個對象。同時點擊按鈕時,f6也能被賦值以新的對象RH,而不會報錯“找不到釋放對象”
果不其然,嘗試了下,這個方法是可以的,符合上述假設。按鈕點擊函數代碼如下
private void button1_Click(object sender, EventArgs e)
{
Form6 RH = new Form6(); //新建一Form6對象
f6 = RH;//f6和RH等同,這樣f1_to_f6()函數才能起作用
RH.Show();//打開Form6窗體,指向RH和f6
}
2.form6下代碼
主要定義yValues變量和Test()函數
public string yValues = "";
public void Test()
{
MessageBox.Show("success!the yValues is :" + yValues );
}
這樣form6打開後,form1裏調用f1_to_f6()函數,就能把值傳遞給form6窗體了,form6窗體會彈出“success!the yValues is :Isform1”對話框。