2012-08-07 53 views
2

我在C#中使用下拉框表单。当下拉框变成了时,我希望它将自定义用户控件加载到面板中。我没有编译错误,没有运行时错误,但我也没有看到用户控件。这里的想法是,每个用户控件都了解不同场景的配置。我想将每个场景封装在自己的控件中,并且下拉框允许用户选择场景,该场景为用户加载控件以执行配置。通过调整下拉菜单中的选项,我可以自定义给定客户的具体情况。正如我所说,我的问题是我无法使任何控件变得可见。这是我使用的下拉指数变化的事件处理程序的代码:动态添加的自定义用户控件不可见

private void ddlCollectorType_SelectedIndexChanged (object sender, EventArgs e) 
{ 
    m_currentControl = null; 
    pnlDeviceConfig.Controls.Clear(); 

    switch ((string) ddlCollectorType.SelectedItem) 
    { 
     case "SEL-421": 
      SEL421ASCIIControl s421 = new SEL421ASCIIControl (this); 
      m_currentControl = s421; 
      pnlDeviceConfig.Controls.Add (s421); 
      break; 
     case "SEL-421 (FTP)": 
      break; 
     case "GE D60": 
      GED6061850Control geD60 = new GED6061850Control (this); 
      m_currentControl = geD60; 
      pnlDeviceConfig.Controls.Add (geD60); 
      break; 
     case "GE D60 (TFTP)": 
      break; 
     case "MiCOM P442": 
      break; 
    } 
} 

我只创建了几个用户控件至今,因此空的case语句。当我做出应该给我看的东西的选择时,我什么也得不到(在调试器中证实我正在触及case case body)。任何帮助将不胜感激!

+2

对我来说,看起来很奇怪,你没有定位或停靠你的控件。我会尝试在调试器中检查它们的X/Y位置和“Size”值。我猜他们是简单的 - “屏幕”或太小。 – 2012-08-07 18:41:42

+0

好吧,我在组件中挖掘出来,发现我将它添加到面板后,我有一个X,Y为0,0(精细),但我有一个宽度,高度为0,0以及(不好) 。我有点用C#练习,我该如何解决这个问题? – Nik 2012-08-07 18:53:35

+0

设置['Width'](http://msdn.microsoft.com/zh-cn/library/system.windows.forms.control.width.aspx)和['Height'](http:// msdn。 microsoft.com/en-us/library/system.windows.forms.control.height.aspx)属性;-) – 2012-08-07 18:56:38

回答

1

要跟进my comment,我猜测你的控件的位置和/或尺寸没有设置。

尝试类似:

... 
SEL421ASCIIControl s421 = new SEL421ASCIIControl (this); 
m_currentControl = s421; 
pnlDeviceConfig.Controls.Add (s421); 

// TODO: Set real size and position. 
s421.Left = 0; 
s421.Top = 0; 
s421.Width = 100; 
s421.Height = 50; 

break; 
... 

你也可以用你的控制DockAnchor性能。

+1

我在属性窗格中设置了最小/最大尺寸,这似乎做了同样的事情。谢谢! – Nik 2012-08-07 19:02:57