SplitContainer中的FixedPanel导致无知大小

时间:2013-04-19 11:48:18

标签: c# .net winforms

我有以下代码将第一个面板的宽度设置为我需要的宽度(出于某种原因,我需要将expectedWith除以2以获得实际宽度为我的预期 - 不知道为什么)。

splitContainer1.SplitterDistance = expectedWith / 2;

接下来我需要的是第一个面板是固定的,意味着如果你调整窗口大小,只有第二个面板变大,第一个面板保持大小。为此,我使用以下行:

splitContainer1.FixedPanel = FixedPanel.Panel1;

现在出现问题:似乎FixedPanel属性完全忽略了第一个面板的大小。如果我使用FixedPanel行,我将SplitterDistance属性设置为哪个值无关紧要。它总是一样的。如果我在表单设计器中设置SplitterDistance,则无关紧要。

有解决方法吗?

5 个答案:

答案 0 :(得分:4)

我可以回答我自己的问题。仅当相应面板的内容在其Dock属性中使用DockStyle.Fill时才会发生这种情况。解决方案是在设置FixedPanel后立即设置DockStyle.Fill值。这也是问题中解释的“两个人分开”的原因。

感谢John Willemse。

答案 1 :(得分:0)

由于你只想要一个固定的第一个面板和一个动态的第二个面板,你不能使用TableLayoutPanel而不是SplitContainer吗?

答案 2 :(得分:0)

DockStyle.None是朝着正确方向迈出的一步。但它需要3-6次迭代(摇动分离器),直到Panel-Window具有预期的尺寸。奇怪!

答案 3 :(得分:0)

我遇到了同样的问题,并且很想使用原始海报的建议并将所需的SplitterDistance除以2,因为它似乎总是(几乎但不完全)是我要求的宽度的两倍。

我尝试在设置SplitterDistance之前将两个面板的子节点的DockStyle更改为None,但在我的情况下,它对问题没有任何影响。

我通过更改SplitterDistance设置时间来解决问题。最初我在调用Form.Show()之前在面板上设置了SplitterDistance。在显示表单后设置SplitterDistance似乎可以解决它。

答案 4 :(得分:0)

我已经想到了这一点。我需要打开一个页面并从注册表中加载分割器位置,但对我设置的手表显示它继续回到控件的设计时间设置的方式感到非常沮丧。

要解决此问题,您只需将“FixedPanel”的属性从“None”更改为panel1或panel2即可。这取决于你。当最小设置不够小和/或当你在另一个相当大的容器中有一个splitcontainer时,它才真正发挥作用。固定面板保持固定。可以使用鼠标选择调整两个面板的大小,因此修复这个词在这方面有点模棱两可。

所以采取设计时控制。把它放在表格上。调整大小以满足您的要求并根据需要进行锚定。除了固定其中一个面板外别无其他。有一个名为“IsSplitterFixed”的属性不触及它,这是该控件变得不稳定并且必须保持错误的原因之一,panel.minsize属性应该根据需求在设计时设置,并且您将始终需要认识到他们的价值观。

从此过上幸福的生活!