首页 > 解决方案 > C# WinForms 面板子定位非常不稳定?

问题描述

这就是问题所在。如果您在面板中动态放置控件,它可以正常工作,但仅在出现垂直滚动条之前。一旦有足够的内容发生这种情况,它就会开始无意义地定位控件。

在我的窗口中,您可以单击一个按钮以在面板内添加另一行控件,这些控件代表列表中某个项目的选项。如果您将面板上的垂直滚动条一直向下滚动并再次单击该按钮,则新的控件行将位于面板底部边缘的下方,看不见。如果向下滚动,则新行与前一行控件之间存在巨大差距。这不应该发生。正如调试输出所证明的那样,定位代码运行良好。据我所知,问题在于愚蠢的锚定系统,但是禁用这些控件上的锚定并不能像人们预期的那样解决问题。相反,它只是使它以不同的方式将它们定位错误。这根本没有意义,而且超级烦人!

在将控件添加到面板之前,我尝试在代码中禁用自动滚动。没变。所以我修改了该代码以禁用垂直滚动条和自动滚动,并在添加控件之前将滚动条设置为不可见。再次没有变化,除了现在禁用的垂直滚动条在面板中有足够的内容时仍然设法显示可用,尽管它被禁用并设置为不可见!?当我禁用并使其不可见时,这不应该发生!在添加到面板的控件上禁用锚定并且一旦出现垂直滚动条,单击按钮以添加更多几行控件现在会导致它们无缘无故地缩进一点,并且垂直定位彼此重叠!就好像面板中的坐标系不知何故随意改变了,因为存在垂直滚动条并且在控件上禁用了锚定?调试代码显示控件都被放置在正确的坐标上,但它们的位置似乎非常错误。所以我的代码运行良好,因此这里还有其他问题。

在垂直滚动条出现之前,一切都完全符合预期。这太奇怪了。有谁知道这些东西到底是怎么回事?显然,让它做一些愚蠢的事情比让它正常工作要容易得多。

标签: c#winformsscrollbarpanelautoscroll

解决方案


再次感谢!我让它工作了。我首先选择了 TaW 的解决方案,因为它似乎是最简单的解决方案。顺便说一句,我前几天在和它打架的时候已经尝试过TaW的方法,但我自然是减去了AutoScrollPosition的值而不是加上它,因为我没想到它是一个负值!

控件定位相对于当前的 AutoScrollPosition 似乎很奇怪,因为绝对坐标似乎比负数更自然、更直观。我想这会使在当前可见区域中放置控件稍微困难一些,但我认为这没什么大不了的,因为大多数可滚动界面可能会提前初始化,并且无论如何都不需要这样做。


推荐阅读