C# SplitContainer中的FixedPanel导致忽略大小

C# SplitContainer中的FixedPanel导致忽略大小,c#,.net,winforms,C#,.net,Winforms,我有以下代码将第一个面板的宽度设置为我需要的宽度(出于某种原因,我需要将expectedWith除以2,以获得我的expectedWith的实际宽度-不知道为什么) 接下来我需要的是第一个面板是固定的,这意味着如果调整窗口大小,只有第二个面板变大,第一个面板保持不变。为了实现这一点,我使用以下行: splitContainer1.FixedPanel = FixedPanel.Panel1; 现在的问题是:FixedPanel属性似乎完全忽略了第一个面板的大小。如果使用FixedPanel线,

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

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

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


有解决办法吗?

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


多亏了John Willemse。

既然您只需要固定的第一个面板和动态的第二个面板,您就不能使用TableLayoutPanel而不是SplitContainer吗?

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

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

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


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

我已经解决了这个问题。我需要打开一个页面并从注册表加载拆分器位置,但我设置的手表显示它一直回到控件的设计时设置,这让我非常失望

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

因此,采用设计时控件。把它写在表格上。调整其大小以满足您的需求,并根据需要固定它。除了固定其中一块面板外,别无选择。有一个名为“IsSpliterFixed”的属性不要碰它,这是该控件变得不稳定且必须保持为false的原因之一,panel.minsize属性应在设计时根据需求进行设置,并且您必须始终了解它们的值


从此幸福地生活

这是不可能的。我得到了一个NotSupportedException,它说我应该使用SplitterDistance来代替。我刚刚尝试了这个,没有发现问题。。无论我以什么顺序设置/取消设置不同的属性,一切似乎都正常。你到底有什么问题?哇,你说得对。只有当Panel1的内容使用.Dock=DockStyle.Fill时,才会出现此问题。疯狂的东西。。。我期待着如何解决它。找到答案。在设置FixedPanel后设置Dock属性权限是有效的。由于某些原因,在设置FixedPanel后设置子控件的Dock属性也对我有效。尽管如此,它需要重新构建控件才能正常工作。这很奇怪。您可能认为设置距离属性这样琐碎的事情不会那么麻烦。用户应该能够手动调整面板的大小。但是我想避免当表单最大化时,它会自动调整大小,例如,您使用的框架版本是什么?因为我无法重现这个问题,我已经尝试了2.0和3.5。。。(尽管我只尝试了Panel1中的一个标签,如果有关联的话。)
splitContainer1.FixedPanel = FixedPanel.Panel1;