2012-03-16 29 views
0

我想创建一个面板,一次只能启用一个控件。 它应该按照单选按钮的方式工作。如何创建独占面板

的想法是这样的事情:

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 2012-03-16 19:55:19

+0

@LarsTech:程序的流程将在需要时启用控件。但是,当我在代码中的某处执行someControl.Enabled = true时,它应该自动禁用先前的活动控件。 – Cristiano 2012-03-16 19:58:28

回答

0

为什么不使用表单加载事件(或类似)来禁用表单上的所有控件(包括设计器添加的控件)。那些以编程方式添加的将被AddControl控制的

+0

是的,这将是一个解决方案,但如果它是可能的,我希望这个工作由面板本身执行,而不用担心这个形式。 – Cristiano 2012-03-17 09:18:26

+0

只需使用ControlAdded事件,然后使用处理程序即可实现您的魔力:) – Kharaone 2012-03-17 14:28:24

+0

不幸的是,ControlAdded事件在Compact Framework中不存在:(:() – Cristiano 2012-03-19 08:04:55