动态添加的自定义用户控件不可见

时间:2012-08-07 18:39:17

标签: c# winforms

我在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语句主体)。任何帮助将不胜感激!

2 个答案:

答案 0 :(得分: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 :(得分:0)

1您可以使用PlaceHolder替换您的菜单,他是添加控件的理想控件

这里有一个例子:http://www.developerfusion.com/code/3826/adding-controls-to-placeholders-dynamically/

2对于您的情况,您可以尝试将面板的可见属性调整为true