这个真的踢我的背后。我有一个表单,由应用程序的主要形式生成并拥有,用于搜索记录。表单放在一个停靠的TableLayoutPanel中,结合了Absolute和Percentage大小的行/列,这样我的标签在数据输入和结果控件增长时保持相同的大小。我们谈论的是20个控件。
问题在于,虽然TableLayoutPanel是填充停靠的,并且所有子控件也都是填充停靠的,但是当我抓住窗口边缘并拖动时,表单内的任何内容都没有调整大小。一切都在设计师中调整得很好,但在实际应用中却没有。
我确实使用了我的Google-fu,并找到this SO question,它指向this MSKB article。我创建了一个派生的FlowLayoutPanel和一个带有线程调用的派生TableLayoutPanel并将它们放入,但它仍然无法正常工作。这是发生这种情况的唯一形式,另一种形式也有一些非常深的嵌套(它使用TabControl和TableLayoutPanel来布局数据输入控件,但没有RB)。
其他相关信息:
我在这里撕扯我的头发。救命啊!
修改:以下是一些显示设计器和应用内部布局行为的请求图片:
以“嵌套”开头的控件直接从内置面板控件派生,它们唯一的更改是重写OnSizeChanged()以异步调用基本方法(KB文章中的解决方法)。正如我之前所说,它也不适用于内置面板。从最后两个窗口可以看出,mainLayout TLP即使停靠在设计器的窗口中也不会增长。
答案 0 :(得分:6)
Epic Facepalm。
在此表单的构造函数(用户代码端)中,我调用SuspendLayout()
来执行可能影响布局的一些其他设置。猜猜完成后我没有打电话。
如果您致电SuspendLayout进行自己的自定义布局更改,请务必在完成后致电ResumeLayout(true)
(或ResumeLayout(false)
后跟PerformLayout()
)。
答案 1 :(得分:4)
控件是否已锚定(.Anchor属性),还是已停靠?我发现设置一个会禁用另一个。我会查看.Designer.cs文件,看看是否正在设置dock和anchor属性,甚至可能从源代码中删除属性(当然事先备份)。
我通常尝试的另一件事是以单独的新形式重新创建表单,看看我是否得到相同的结果。
答案 2 :(得分:1)
我遇到的问题是usercontrols没有按照你所描述的方式执行操作,因为usercontrol autoscalemode属性设置为'font' - 尝试将其更改为继承。
答案 3 :(得分:1)
尝试在Dock = DockStyle.Fill
的容器上设置TableLayoutPanel
。
答案 4 :(得分:0)
不要将各个控件停靠或锚定在TableLayoutPanel中。那很少能做到你想要的。