2013-05-02 90 views
0

我是Window應用程序中的新增功能。我有兩種形式form1和form2。 From1有一個文本框,form2有一個組合框。現在,當我關閉form2時,我想將form2的combox選定項顯示到form1的文本框中。因此,我已經定義了一個靜態類(marketclass)並將選定值賦給statik變量。 Beow是我的form2代碼。窗口應用程序中的文本框中的顯示值

private void cboMarkets_SelectedIndexChanged(Object sender, System.EventArgs e) 
    { 
     marketclass.nAlgoproperty = Convert.ToInt32(cmbMarket.SelectedValue); 
     this.Close(); 
    } 

現在下面的id是我的form1代碼。

public Form1() 
    { 
     InitializeComponent();   

     if (marketclass.nAlgoproperty > 0) 
     { 
      textbox1.text = marketclass.nAlgoproperty; 
     } 
} 

但是不起作用。那麼我怎麼能做到這一點。

謝謝。

+0

究竟是不是工作?嘗試具體。 – 2013-05-02 04:38:32

+0

當我選擇combox值並關閉form2時,form1的Combox選擇值不會顯示在form1的文本框中。 – Hitesh 2013-05-02 04:40:13

+0

你在form1中調用'form2',你應該在啓動'form2'之後執行賦值,然後設置值 – V4Vendetta 2013-05-02 04:49:30

回答

2

顯示通過的ShowDialog()窗體2,然後檢索值:

// ... in Form1 ... 
Form2 f2 = new Form2(); 
f2.ShowDialog(); // code stops here until "f2" is closed 
textbox1.text = marketclass.nAlgoproperty; 
+0

謝謝。現在它按照我的要求工作。再次感謝。 – Hitesh 2013-05-02 04:51:09

+1

是的,'ShowDialog()'比'Show()'更可取 - 與後者混淆的空間太大。 – J0e3gan 2013-05-02 04:57:29

0

您是否設置了ComboBox的ValueMember屬性?如果不是,那麼,你應該或者您使用下拉列表中顯示文本值,你必須使用SelectedText屬性來代替:

private void cboMarkets_SelectedIndexChanged(Object sender, System.EventArgs e) 
{ 
    marketclass.nAlgoproperty = Convert.ToInt32(cmbMarket.SelectedText); 
    this.Close(); 
} 
0

一般

這種類型的問題是良好使用模型 - 視圖 - 控制器(MVC)模式解決。

這看起來像WinForms,它並不完全支持MVC。然而,儘管如此,你當然可以實現MVC模式。

對於一個好的入門文章中,我建議你看看

http://www.codeproject.com/Articles/383153/The-Model-View-Controller-MVC-Pattern-with-Csharp

具體到這個問題

您正試圖實現使用靜態變量類似的結果。問題很可能是您更改後備靜態變量的值以及何時查找更改的時機。

textbox1.text = marketclass.nAlgoproperty; 

在Form1加載時被調用。在Form2的複選框處理程序更新marketclass中的值之前,可能Form1確實已加載。

即使現在情況並非如此,這可以說明您將使用現在使用的模式遇到的問題類型。

MVC模式通過將一個或多個控件綁定到一個支持變量來解決這種類型的計時問題,例如,如果一個UI元素更改該值,則該值將更新,並且所有其他綁定的UI元素也會更新。相反,如果值發生變化(比如說因爲它是從數據庫加載的),所有綁定的UI元素都會自動更新。

0

您正在Form1的構造進行分配textbox1.Text = marketclass.nAlgoproperty(即之前Form2一個值分配給marketclass.nAlgoroperty)。

撇開「最好」的方式來做到這一點,您可以在Form1的電話後執行分配,顯示Form2(即一旦Form2關閉)。

form2.Show(); 
textbox1.Text = marketclass.nAlgoproperty; 

這應該做到這一點。一旦你開始工作,考慮一個更好的方法來做到這一點 - 例如MVC and Observer設計模式。

+0

yes我知道,但是當我打開form2時,選擇combobox值並關閉form2那麼我想在文本框中顯示該值。在Form1中顯示Form2 – Hitesh 2013-05-02 04:45:21

+0

的呼叫之後,我該如何執行分配? :) – J0e3gan 2013-05-02 04:45:54

+0

如何在Form1中顯示Form2的調用之後執行賦值。我不知道方式。你可以給我舉個例子嗎? – Hitesh 2013-05-02 04:48:05

相關問題