4

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

splitContainer1.SplitterDistance = expectedWith / 2;

我需要的下一件事是第一个面板是固定的,这意味着如果您调整窗口大小,只有第二个面板变大而第一个面板保持大小不变​​。为此,我使用以下行:

splitContainer1.FixedPanel = FixedPanel.Panel1;

现在的问题:FixedPanel 属性似乎完全忽略了第一个面板的大小。如果我使用 FixedPanel 线,我将 SplitterDistance 属性设置为哪个值并不重要。它总是一样的。即使我在表单设计器中设置 SplitterDistance 也没关系。

有针对这个的解决方法吗?

4

5 回答 5

5

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

感谢约翰威廉斯。

于 2013-04-19T12:15:38.193 回答
1

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

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

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

于 2014-05-16T17:50:50.413 回答
0

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

于 2014-01-10T15:45:14.823 回答
0

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

于 2013-04-21T14:57:38.843 回答
0

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

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

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

从此过上幸福的生活!

于 2015-08-03T10:08:14.660 回答