2012-03-17 62 views
2

我想要做一個簡單的Windows窗體應用程序,它將根據前面的元素的值顯示不同的選項 - 例如,我在窗體頂部有四個單選按鈕,每一個都會顯示和隱藏表單中的各種其他元素 - 實質上是將多個表單合併在一起。有條件地顯示/隱藏Windows窗體元素

我有這個成立於一大條件語句(這只是一小部分,但它是所有類似):

private void Payment_Load(object sender, EventArgs e) 
    { 
      if (rdoMultChoice.Checked) 
      { 

       lblGroupBox1_MC.Visible = true; 
       lblGroupBox1_FITB.Visible = false; 
       lblGroupBox1_TF.Visible = false; 
      // etc... 
      } 
      else if (rdoFillInBlank.Checked) 
      { 
       lblGroupBox1_MC.Visible = false; 
       lblGroupBox1_FITB.Visible = true; 
       lblGroupBox1_TF.Visible = false; 
      // etc... 
      } 

問題是,當我運行應用程序的形式完全忽略這些聲明,似乎只是使我的所有元素可見。

http://msdn.microsoft.com/en-us/library/754w18dd.aspx

此鏈接是有點相似,我的需求。我試圖將它適應於我的情況,但它似乎沒有工作(不能保證我做對了......)。

看起來像這樣應該是一件非常簡單的事情,但我是C#的新手,並且本週纔開始使用它 - 這是一個CS類的任務。只是咆哮,我們有望在15周內用13種語言發展「專業知識」!由於大學提供的資源非常少,迄今爲止,我所開發的唯一專業知識是搜索文檔和堆棧溢出!我會做:)

回答

3

第一件事情就是把一個斷點在代碼:

private void Payment_Load(object sender, EventArgs e) 
{ 
    if (rdoMultChoice.Checked) // <-- Put breakpoint here. 

你想,如果正在執行Payment_Load就知道了。

接下來,在您確定正在執行之後,請檢查您的代碼,看看是否有任何可能會更改標籤的可見性。它可能是另一段正在更改.Visible設置的代碼。

+1

是的,這是最可能的解釋。 Payment.Load事件實際上並沒有連接到您的處理程序。這不會在C#中自動發生,就像在VB.NET中一樣。 – 2012-03-17 10:56:12

+0

看起來這很可能是問題,你能否解釋鏈接事件和監聽器的最佳方式?我應該在付款加載還是在我的main()中執行此操作? – user1275567 2012-03-18 00:23:28

+0

@user:在「付款」表單的***構造函數***中執行此操作。這是簽名爲Payment()的方法。現在,它可能包含一行代碼:調用InitializeComponent方法。 – 2012-03-18 07:22:11

1

您可能需要爲您的控件添加一個偵聽器。 像這樣:

rdoMultChoise.CheckedChanged += Payment_Load; 
1

Intially讓所有的控制visiible屬性設置爲false,並再次讓他們在可見的Form_Load()。

因爲當一個表單加載所有控件被初始化並且他們的狀態改變時。