【问题标题】:How to make WinForms UserControl fill the size of its container如何使 WinForms UserControl 填充其容器的大小
【发布时间】:2012-06-03 15:27:25
【问题描述】:

我正在尝试创建一个多布局主屏幕应用程序。我在顶部有一些按钮链接到应用程序的主要部分(例如模型中每个实体的管理窗口)

单击这些按钮中的任何一个都会在面板中显示关联的用户控件。 Panel 拥有 UserControl,而后者又拥有 UI。

WinForms 用户控件没有AnchorDock 属性。

我已经尝试过设置 UserControl 的属性

AutoSize=True

private void ManageUsersControl_Load(object sender, EventArgs e)
{
        this.Width = this.Parent.Width;
        this.Height = this.Parent.Height;
}

但是这些都不起作用。
注意:我在运行时动态加载这个控件

【问题讨论】:

  • UserControl 确实有一个 Dock 属性 - 它从 Control 继承该属性。请参阅msdn.microsoft.com/en-us/library/… 的属性部分
  • 上述语句“Winforms 用户控件没有“Anchor”或“Dock”属性”是错误的。我在 UserControl 上寻找“Dock”。它应该只出现在添加到 UserControl 的控件(子控件)中。
  • @MvanGeest 是的,这是有道理的,但为什么它没有出现在设计器属性网格中?
  • 因为此时,UserControl 是独立的,没有添加到任何需要填充类型的父级 - 如果我在 Panel 控件上并且我添加了 UserControl,它应该会显示跨度>
  • 我认为 System.Windows.Forms.UserControl (确实有 Dock 属性)和 System.Windows.Controls.UserControl (没有t)。

标签: c# .net winforms mdi multipage


【解决方案1】:

尝试将Dock 属性设置为Fill

private void ManageUsersControl_Load(object sender, EventArgs e)
{
        this.Dock = DockStyle.Fill;
}

我还将AutoSize 设置为默认值,我相信是False。看看它是如何工作的......

【讨论】:

  • 来自 OP:The winforms usercontrol does not have the "Anchor" or "Dock" property.
  • 好吧,这真的让我很吃惊。你知道为什么这个属性不在 UserControl 设计器属性网格中吗?顺便说一句,它在运行时完美运行。
  • @tunmisefasipe: 很高兴能帮上忙...你可以尝试设置DoubleBuffered = true ...IIRC。是的,设计师没有 Dock 属性有点令人沮丧。但是,这是有道理的 - 当在设计器中处理 UserControl 本身时,它将使用什么容器来最大化 自身?没有容器到Fill到。
  • @yoyo: OP 正在使用 WinForms。
  • 谢谢@IAbstract,你是对的。我在调查类似问题时发现自己在这里。我的应用程序同时包含 WPF 和 WinForms 元素,我把自己与两个不同的 UserControl 类混淆了,其中只有一个具有 Dock 属性。
【解决方案2】:
UserControl1 myusercontrol = new UserControl1();
            myusercontrol.Dock = DockStyle.Fill;//Dock Prope. Fill user Control Contrainer
            TabPage myTabPage = new TabPage();//New Tab Create
            myTabPage.Text = "Wel-Come Page";//Tab Header Txt
            myTabPage.Controls.Add(myusercontrol);
            tabControl1.TabPages.Add(myTabPage);

【讨论】:

    【解决方案3】:

    在调整大小事件用户控件中。

     private void MyTextBox_Resize(object sender, EventArgs e)
            {
                this.Width = textBox1.Width;
                this.Height = textBox1.Height;
            }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-02-18
      • 2015-09-10
      • 1970-01-01
      • 1970-01-01
      • 2011-06-25
      • 2019-10-25
      • 1970-01-01
      相关资源
      最近更新 更多