2012-03-17 16 views
2

私はフォームの上部に4つのラジオボタンがあるなど、前の要素の値に基づいてさまざまなオプションを表示する単純な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

まず最初は、あなたのコードにブレークポイントを入れて:あなたはPayment_Loadが実行されているかどうかを知りたい

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

次に、特定のコードが実行されていることを確認したら、コードをチェックして、ラベルの可視性を変更する可能性のあるものがあるかどうかを確認します。それは.Visible設定を変更している別のコードです。

+1

はい、これが最も可能性の高い説明です。 'Payment.Load'イベントは実際にあなたのハンドラにフックアップされません。これはVB.NETのようにC#では自動的には発生しません。 –

+0

これは問題の可能性が最も高いと思われますが、イベントとリスナーをリンクする最善の方法を説明できますか?私は支払いの負荷の中で、または私のメイン()でこれを行う必要がありますか? – user1275567

+0

@user: 'Payment'フォームの***コンストラクタ***で行います。それは署名 'Payment()'のメソッドです。今は、おそらく 'InitializeComponent'メソッドの呼び出しという1行のコードを含んでいます。 –

1

おそらく、コントロールにリスナーを追加する必要があります。

rdoMultChoise.CheckedChanged += Payment_Load; 
1

Intially falseにすべてのコントロールvisiibleプロパティを作成し、再びのForm_Load(上から見えるよう):このよう 。

フォームがロードされると、すべてのコントロールが初期化され、状態が変更されるためです。