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

4

2 回答 2

1

为了跟进我的评论,我猜您的控件的位置和/或尺寸没有设置。

尝试类似:

...
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属性。

于 2012-08-07T19:00:15.593 回答
0

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

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

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

于 2012-08-07T18:51:03.710 回答