2012-08-12 75 views
0

如何通过代码在我的父窗体中安排控件?在VB.NET中的父窗体上动态地排列用户控件

到目前为止,我用这个代码调用用户控件;

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是被调用的控件。我不打算在设计期间将用户控件放在父窗体上,因为在调用活动控件中的特定功能后,我有其他用户控件可以调用。

我试过了autosize属性的usercontrol,但我想它不适用于我的应用程序。 Usercontrol不具有停靠和锚定属性。

回答

1

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

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

这听起来对我来说就像一个FlowLayoutPanel是你想要的。因此,控件的布局将完全自动处理,它们按照从左到右或从上到下的顺序进行定位,具体取决于FlowDirection property的值。

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

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

+0

我从来没有想过我可以将usercontrols添加到flowlayoutpanel。我会尝试的。 – 2012-08-12 07:49:25

+0

它似乎没有工作,这是我所做的; 昏暗usrctl作为新_ctlMain _Main.FlowLayoutPanel.Controls.Add(usrctl) usrctl.Location =新点(_Main.FlowLayoutPanel.Width/2 - usrctl.Width/2,_Main.FlowLayoutPanel.Height/2 - usrctl。 Height/2) – 2012-08-12 07:55:53

+0

试图将FlowDirection设置为LeftToRight/RightToLeft,我得到的只是将usercontrol移动到屏幕的另一侧。我期待它在FlowLayoutPanel的中心。 – 2012-08-12 08:05:17

相关问题