嵌套的SplitContainers会破坏SplitterWidth

时间:2014-11-09 16:40:45

标签: vb.net splitcontainer

所以我有3个分开的容器,每个容器有2个面板。

SplitContainer1是停靠在Form(Parent)中的主要容器。

SplitContainer1.Panel1包含停靠的SplitContainer2

SplitContainer1.Panel2包含停靠的SpliContainer3

到目前为止一切顺利。

SplitContainer1的{​​{1}}为3。 SplitterWidthSplitContainer2的{​​{1}}为6。

在Designer中,您可以看到它们之间的SplitContainer3差异,但是当我构建解决方案时,SplitterWidthSplitterWidth的{​​{1}}会重置为4不管我做什么。我更改了" InitializeComponent"中的代码。形式没有效果。

我实现此功能的唯一方法是在表单的SplitterWidth中,重新指定我发现完全愚蠢的SplitContainer2。为什么SplitContainer3保持在我在Designer中指定的值?

如果有人能够对此有所了解,那会是什么太棒了!!

感谢您的时间,

彼得

2 个答案:

答案 0 :(得分:1)

只是为了永远不会得不到答案 -

这是一个旧版本的错误,现在已经在许多版本的Visual Basic中使用,并且永远不会被解决(也不可能解决)。

正如Hans Passant所提到的那样,问题归因于ISupportInitialize的{​​{1}}实施。

由于这是一个错误,因此没有明确的方法来解决任何符合逻辑的问题。

我在模拟程序中测试过的一种方法是@xfx说 - 以编程方式添加和操作控件,而不是使用工具箱。

另一种方法是以编程方式重新加载SplitContainer,无论是SplitterWidths,最有可能,还是代码中可能需要的其他地方。

答案 1 :(得分:0)

我认为这不是一个错误。

当容器控件嵌套到设计器中的其他容器控件中时,嵌套控件必须是从工具箱拖放到窗体上的第一个控件。

例如,如果有两个SplitContainers - splitContaner1(child)和splitContaner2(parent) - 要在设计时嵌套,则必须首先将splitContaner1(嵌套)拖放到窗体上。在父父splitContaner2之后。最后,splitContaner1可以嵌套到splitContaner2.Panel1(或2)中。

此规则在设计时和运行时确保属性(例如SplitterWidth属性)的相同影响,并且将节省在load事件处理程序或构造函数中编写其他代码以修复“bug”的需要。