【问题标题】:How to position UserControl inside of a Panel when it is added at run-time?在运行时添加时如何将 UserControl 放置在 Panel 内?
【发布时间】:2012-06-05 23:23:00
【问题描述】:

我有一个对话框表单,其中混合了设计时和运行时添加的控件。这些控件中的每一个都托管在面板中。每个面板都有 FillStyle.Top 集。

在运行时,我将 UserControl 添加到面板:

public NetworkDiscoveryDialog(CSNetworkDiscovery networkDiscovery) : this()
{
    NetworkDiscovery = networkDiscovery;
    SnmpCommunitiesUserControl = new SnmpCommunitiesUserControl(NetworkDiscovery.SnmpCommunitiesSetting);
    panel2.Controls.Add(SnmpCommunitiesUserControl);
}

public partial class SnmpCommunitiesUserControl : UserControl
{
    public SnmpSetting SnmpSetting { get; set; }

    public SnmpCommunitiesUserControl()
    {
        InitializeComponent();
        Anchor = (AnchorStyles.Top | AnchorStyles.Left);
        Dock = DockStyle.Fill;
    }

    public SnmpCommunitiesUserControl(SnmpSetting snmpSetting)
        : this()
    {
        SnmpSetting = snmpSetting;
    }
}

很遗憾,SnmpCommunitiesUserControl 与设计时添加的控件的位置不同。

我试过了:

  • 设置面板的边距以及内边距。
  • 设置 UserControl 的边距和内边距。
  • 锚点和 Dock 设置。

这些似乎对运行时添加的 UserControl 没有任何影响。

以前,我将“Location”参数传递给我的 UserControl 的构造函数。这允许我设置 UserControl 的位置,但不是可维护的解决方案。

我应该怎么做?

编辑:

我目前的解决方案是在第一个面板内嵌套第二个面板。我清除了两个面板的所有边距和填充。父面板具有 Dock.Top,其子面板具有 Dock.Fill。然后,我将孩子的左/右填充设置为 10。这会导致运行时添加的控件出现在正确的位置。不过,我对这个解决方案并不满意。

【问题讨论】:

  • @KRAZE:它是一个基于 Windows 的应用程序。
  • 我的错,我不知道为什么我没有看到我的大脑正在查看 aspnet.. 对此感到抱歉..

标签: c# winforms layout panel


【解决方案1】:

您应该自己设置位置和大小属性,或者您可以设置新控件的 Dock 属性。另一种方法是将主机面板更改为 StackLayoutPanel 或 TableLayoutPanel。

【讨论】:

  • 停靠属性已设置为填充。 UserControl 将被多个对话框使用。因此,我需要能够动态推断该位置以防止维护问题。我不想为每个对话框手动设置我的 UserControl 的 Location 属性。我的理解是,如果无法调整对话框的大小,一组面板的功能应该与 TableLayoutPanel 的功能类似。这是不正确的吗?
  • 你是对的,但是控制树不是那么容易填充的。控件的顺序对于正确的布局非常重要。
  • 尝试通过View->Other Windows->Document Outline查看表单设计者生成的表单布局。它将为您提供大量信息。
【解决方案2】:

如果你想设置绝对位置,你应该将 Location 属性设置为你的位置并将停靠设置为无。
control.Location = new Point(x, y);
control.Dock = DockStyle.None;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-13
    相关资源
    最近更新 更多