2012-03-16 12 views
0

一度に1つのコントロールしか有効にできないパネルを作成したいと思います。 ラジオボタンと同じように機能するはずです。このコードの問題は、それはあなたがコードでフォームを作成する場合にのみ動作することである専用パネルの作成方法

class XClusivePanel : Panel 
{ 
    // Init code 

    // Use this in order to add Exclusive Controls 
    void AddControl(Control c) 
    { 
     if(! Controls.Contains(c)) 
     { 
      Controls.Add(c); 

      c.Enabled = false; 

      c.EnabledChanged += new System.EventHandler(this.control_EnabledChanged); 
     } 
    } 

    // Avoid more than one control enabled at a time. 
    private void control_EnabledChanged(object sender, EventArgs e) 
    { 
     Control s = (Control)sender; 

     if(s.Enabled == true) 
     { 
      foreach(Control c in Controls) 
      { 
       if(s != c) 
       { 
        s.Enabled = false; 
       } 
      } 
     } 
    } 
} 

;:

アイデアは、そのようなものですデザイナを使用してコンポーネントを追加しても機能しません。

ところで、私は.NET CFで作業しています。

+0

他のすべてが無効になっている場合、ユーザーがどのように切り替えますか? – LarsTech

+0

@LarsTech:プログラムの流れは必要なときに制御を可能にする。しかし、コードのどこかでsomeControl.Enabled = trueを実行すると、以前アクティブなコントロールが自動的に無効になります。 – Cristiano

答えて

0

フォームのすべてのコントロール(デザイナで追加されたものを含む)を無効にするために、フォームのロードイベント(または同様のもの)を使用しないのはなぜですか?プログラマチックに追加されたものは、あなたのAddControlによって注意が払われます

+0

ええ、それは解決策ですが、可能であれば、フォーム自体を心配することなく、パネル自体でこの作業を実行したいと思います。 – Cristiano

+0

ControlAddedイベントを使って、あなたの魔法を扱うハンドラを使ってください:) – Kharaone

+0

残念ながら、ControlAddedイベントはCompact Frameworkに存在しません。:( – Cristiano

関連する問題