动态添加和删除UserControl

Moh*_*vel 1 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);
Run Code Online (Sandbox Code Playgroud)

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

Pat*_*ald 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;
    }
}
Run Code Online (Sandbox Code Playgroud)

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

GraphUserControl usr = new GraphUserControl();
AddControl(usr);
Run Code Online (Sandbox Code Playgroud)