【发布时间】:2021-03-03 22:26:11
【问题描述】:
这就是问题所在。如果您在面板中动态放置控件,它可以正常工作,但仅在出现垂直滚动条之前。一旦有足够的内容发生这种情况,它就会开始无意义地定位控件。
在我的窗口中,您可以单击一个按钮以在面板中添加另一行控件,这些控件代表列表中某个项目的选项。如果您将面板上的垂直滚动条一直向下滚动并再次单击该按钮,则新的控件行将位于面板底部边缘的下方,看不见。如果向下滚动,则新行与前一行控件之间存在巨大差距。这不应该发生。正如调试输出所证明的那样,定位代码运行良好。据我所知,问题在于愚蠢的锚定系统,但是禁用这些控件上的锚定并不能像人们预期的那样解决问题。相反,它只是让它以不同的方式将它们定位错误。这根本没有意义,而且超级烦人!
在将控件添加到面板之前,我尝试在代码中禁用自动滚动。不用找了。所以我修改了该代码以禁用垂直滚动条和自动滚动,并在添加控件之前将滚动条设置为不可见。没有任何变化,除了现在禁用的垂直滚动条在面板中有足够的内容时仍然设法显示可用,尽管它被禁用并设置为不可见!?当我禁用并使其不可见时,这不应该发生!在添加到面板的控件上禁用锚定并且一旦出现垂直滚动条,单击按钮以添加更多几行控件现在会导致它们无缘无故地缩进一点,并且垂直定位彼此重叠!就好像面板中的坐标系以某种方式任意改变了,因为存在垂直滚动条并且在控件上禁用了锚定?调试代码显示控件都被放置在正确的坐标上,但它们的位置似乎非常错误。所以我的代码运行良好,因此这里还有其他问题。
在垂直滚动条出现之前,一切都与预期完全一样。这太奇怪了。有谁知道这些东西到底是怎么回事?显然,让它做一些愚蠢的事情比让它正常工作要容易得多。
【问题讨论】:
-
所以我的代码运行良好,因此这里存在其他问题。 尝试创建可以向我们展示重现问题的代码。很可能您需要添加滚动位置..
-
您将控件放置在与 不可变 ClientRectangle 布局相关的位置(您认为它只会向下扩展,无论如何都保持固定的原点)。您应该考虑当前的
DisplayRectangle,因为这是一个 ScrollableControl,一个 moving,而不是 plain 表面。或者在容器内放置一个锚定的 TableLayoutPanel 并为其添加控件。
标签: c# winforms scrollbar panel autoscroll