动态添加和删除UserControl

时间:2009-03-24 13:35:18

标签: c# winforms

我有UserControl,它拥有Infragistics Graph控件。在TreeView子节点的右键单击中,我将上下文菜单设置为“Create Graph”。这将创建新图。这是关于我将要做的事情。

我对使用什么布局感到困惑。无论是FlowLayoutPanel还是TableLayoutPanel还是其他任何东西。如果只添加一个图表 - >图必须占据完整的形式。如果添加了两个图表 - >两个图形必须分割空间等等。这只是一个接一个的格式。即第一个图表位于顶部,第二个图表位于第一个图表之后。所以。

如果手动更改UserControl,它不应影响我们显示的大小。

这是WinForm。目前我使用FlowLayoutPanel,我创建了具有常量大小的面板,并使用DockStyle.Fill添加了UserControl。然后我将Panel添加到FlowLayoutPanel。

 GraphUserControl usr = new GraphUserControl();
 usr.Dock = DockStyle.Fill;

 Panel pnl = new Panel();

 pnl.Controls.Add(usr);

 flowLayoutpnl.Controls.Add(pnl);

这样做的最佳方法是什么?

1 个答案:

答案 0 :(得分:5)

TableLayoutPanel可能是您的最佳选择,因为行高可以设置为百分比值。

private void AddControl(Control ctl)
{
    tableLayoutPnl.RowCount += 1;
    tableLayoutPnl.RowStyles.Add(
        new RowStyle(SizeType.Percent, 100F / tableLayoutPnl.RowCount));
    ctl.Dock = DockStyle.Fill;
    tableLayoutPnl.Controls.Add(ctl, 0, tableLayoutPnl.RowCount - 1);
    foreach (RowStyle rs in tableLayoutPnl.RowStyles)
    {
        rs.Height = 100F / tableLayoutPnl.RowCount;
    }
}

然后您可以按如下方式调用它:

GraphUserControl usr = new GraphUserControl();
AddControl(usr);