.net SplitContainer中的FixedPanel导致忽略大小

afdcj2ne  于 2023-05-19  发布在  .NET
关注(0)|答案(6)|浏览(149)

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

splitContainer1.SplitterDistance = expectedWith / 2;

我需要的下一件事是,第一个面板是固定的,这意味着如果你调整窗口的大小,只有第二个面板变大,第一个保持在大小。为了实现这一点,我使用以下代码行:

splitContainer1.FixedPanel = FixedPanel.Panel1;

现在的问题是:看起来FixedPanel-property完全忽略了第一个面板的大小。如果我使用FixedPanel-line,则将SplitterDistance-property设置为哪个值并不重要。总是一样的。即使我在表单设计器中设置了SplitterDistance也没有关系。
有解决办法吗?

7kjnsjlb

7kjnsjlb1#

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

byqmnocz

byqmnocz2#

我遇到了同样的问题,并试图使用原始海报的建议,只是将所需的SplitterDistance除以2,因为它似乎总是(几乎但不完全)是我要求的宽度的两倍。
在设置SplitterDistance之前,我尝试将两个面板的子面板的DockStyle更改为None,但在我的情况下,它对问题没有任何影响。
我通过改变设置SplitterDistance的时间来解决这个问题。最初我是在调用Form.Show()之前在面板上设置SplitterDistance。在显示窗体后设置SplitterDistance似乎可以解决这个问题。

egdjgwm8

egdjgwm83#

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

chhqkbe1

chhqkbe14#

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

am46iovg

am46iovg5#

我想明白了。我需要有一个页面打开,并从注册表加载拆分器位置,但非常沮丧的方式,我设置的手表显示,它不断回到设计时设置的控件。
要解决这个问题,只需将“FixedPanel”的属性从“None”更改为panel 1或panel 2。这取决于你只有当最小值设置不够小和/或在另一个相当大的容器中有一个splitcontainer时,它才真正发挥作用。那么固定面板保持固定。这两个面板都可以调整大小,因为你选择使用鼠标,虽然所以这个词固定是有点含糊。
所以要控制设计时间。把它放在表格上。调整其大小以满足您的要求,并根据需要将其固定。除了固定其中一个面板之外,没有别的。有一个名为“IsSplitterFixed”的属性,请不要碰它,这是此控件变得不稳定并且必须保持false的原因之一,panel.minsize属性应在设计时根据要求设置,并且您将始终必须了解其值。
从此过上幸福快乐的生活!

mcvgt66p

mcvgt66p6#

在我的特殊情况下,我观察到同样的事情:只要未设置FixedPanelSplitterDistance就可以工作,但修复方法是确保.Size设置为大于.SplitterDistance的值**之前 * 设置它:

splitContainer.Size = new System.Drawing.Size(1000, 1000); // !!!
splitContainer.FixedPanel = System.Windows.Forms.FixedPanel.Panel1;
splitContainer.SplitterDistance = 400;

相关问题