【问题标题】:Arrange user controls dynamically on parent form in VB.NET在 VB.NET 中的父窗体上动态排列用户控件
【发布时间】:2012-08-12 07:12:15
【问题描述】:

如何通过代码在我的父窗体中排列控件?

到目前为止,我使用此代码调用用户控件;

 Me.ParentForm.Controls.Remove(Me)
 controlMain()

我希望用户控件在用户调整父窗体大小或最大化窗体时自行排列。目前,我通过以下方式设置控件,

    Public Sub controlMain()
        Dim usrctl As New _ctlMain
        _Main.Controls.Add(usrctl)
        usrctl.Location = New Point(_Main.Width / 2 - usrctl.Width / 2, _Main.Height / 2 -usrctl.Height / 2)
    End Sub

在一个模块上。 _Main 是我的父窗体,而 _ctlMain 是被调用的控件。我不打算在设计期间将用户控件放在父窗体上,因为在调用活动控件中的特定函数后,我还有其他用户控件要调用。

我已经尝试了 usercontrol 的 autosize 属性,但我想它不适用于我的应用程序。用户控件没有停靠和锚点属性。

【问题讨论】:

    标签: vb.net forms user-controls


    【解决方案1】:

    使用其中一种自动布局控件,例如 FlowLayoutPanelTableLayoutPanel

    不要将用户控件添加到表单本身,而是将它们添加到使用DockStyle.Fill 放置在表单顶部的 FlowLayoutPanel 或 TableLayoutPanel 控件。

    在我看来,FlowLayoutPanel 就是您想要的。这样,控件的布局将完全自动处理,它们的位置可以从左到右或从上到下,具体取决于FlowDirection property 的值。

    选择 TableLayoutPanel 的唯一原因是如果您需要更精确地控制控件的精确定位。它就像一个 HTML 表格,每个控件都有自己的“单元格”。

    如果您想确保自动调整大小,您还可以设置各个用户控件的Dock 和/或Fill 属性。例如,您可以将每个控件设置为填充 TableLayoutPanel 中放置它的整个单元格。

    【讨论】:

    • 我从没想过我可以将用户控件添加到flowlayoutpanel。我会试试的。
    • 它似乎不起作用,这就是我所做的;将 usrctl 作为新 _ctlMain _Main.FlowLayoutPanel.Controls.Add(usrctl) usrctl.Location = 新点 (_Main.FlowLayoutPanel.Width / 2 - usrctl.Width / 2, _Main.FlowLayoutPanel.Height / 2 - usrctl.Height / 2)
    • 试图将 FlowDirection 设置为 LeftToRight/RightToLeft,我得到的只是用户控件移动到屏幕的另一侧。我希望它位于 FlowLayoutPanel 的中心。
    • 而且用户控件上没有DockFill
    • FlowLayoutPanel 没有居中选项。您需要为此使用 TableLayoutPanel。是的,所有用户控件都有DockFill 属性;它们从 Control 基类继承。
    猜你喜欢
    • 2012-03-24
    • 2017-06-07
    • 1970-01-01
    • 2016-03-19
    • 1970-01-01
    • 1970-01-01
    • 2015-05-08
    • 1970-01-01
    • 2016-08-04
    相关资源
    最近更新 更多