【问题标题】:Add and remove the UserControl dynamically动态添加和删除 UserControl
【发布时间】:2009-03-24 13:35:17
【问题描述】:

我有持有 Infragistics Graph 控件的 UserControl。在 TreeView 子节点的右键单击上,我将上下文菜单设置为“创建图形”。这将创建新图表。这就是我要做的事情。

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

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

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

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

 Panel pnl = new Panel();

 pnl.Controls.Add(usr);

 flowLayoutpnl.Controls.Add(pnl);

执行此操作的最佳方法是什么?

【问题讨论】:

  • RE 接受的答案和闪烁的问题,您可以尝试在之前调用 tableLayoutPnl.SuspendLayout 和之后调用 tableLayoutPnl.ResumeLayout,这可能会有所帮助

标签: c# winforms


【解决方案1】:

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);

【讨论】:

  • 此代码存在一些问题。然而我使用这种方法。现在我使用 ControlCollection。添加新控件时,复制TableLayoutPanel中添加的控件,清空TableLauoytPanel,重新添加所有控件。这会导致闪烁。
  • RE你的闪烁问题,你可以尝试调用tableLayoutPnl.SuspendLayout之前和tableLayoutPnl.ResumeLayout之后,这可能会有所帮助
猜你喜欢
  • 2017-06-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-03
  • 2013-02-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多