如何强制以超类形式放置控件?

时间:2013-03-29 19:43:38

标签: c# winforms visual-studio user-controls

有关问题的快速摘要,请查看底部的图片。

您好,

我创建了一个Form(名为BaseForm),作为我所有窗口的基础。 这个base-Form包含(为简单起见)底部的“statusbar”(用户控件)。

该状态栏已锁定,因此无法在设计器中移动或调整其大小。 它还将它的锚设置为左,下,右,因此它始终保持在底部并水平调整大小。

现在当创建另一个Form并进行更改以便它继承MyProject.BaseForm而不是System.Windows.Forms.Form时,状态栏就在那里。

但现在状态栏的位置和大小存在问题。 状态栏的标准位置和大小是错误的。 VisualStudio从BaseForm获取位置和大小,而不是应用Anchor。

此外,我不能(并且不想!)移动/调整状态栏以调整问题。

一个明显且有效的解决方案是将statusbars Dock属性设置为Bottom。 但是我不能将它作为我问题的通用解决方案,因为我也有不应该停靠的控件。 (例如,应始终位于表单右下角的按钮)

2 个答案:

答案 0 :(得分:2)

你有一个简单的问题,控件是私有的,所以不能在派生形式中搞乱。它的所有属性都不可访问,包括位置和大小。这会在你派生的表格上的错误位置冻结它。布局引擎也无法移动它。为什么它会显示锁定图标。

返回BaseForm,选择用户控件并将Modifiers属性从Private更改为Protected。重建。现在,您可以在需要使用的派生表单上移动它。

答案 1 :(得分:1)

我认为解决此问题的最佳方法是使用TableLayoutPanel代替显式停靠。在父表单中创建一个2行TableLayoutPanel。制作底行AutoSize并将状态栏放入其中。这样,派生表单可以自由地在另一行中添加内容,该行代表控件的其余部分。