.net滚动条自动滚动问题

Mat*_*del 6 .net c# resize autoscroll

我正在.net中编写一个应用程序,它在对话框中使用autoscroll作为布局面板.似乎每当我调整窗口大小以便显示垂直滚动条时,水平滚动条也会自动出现.仔细观察它,第二个滚动条现在允许我将窗口滚动16个像素(另一个滚动条的宽度).所以Windows似乎认为我需要一个至少与垂直滚动条出现之前一样宽的客户区.

如果我现在将窗口调整为宽16像素(这样我的窗口区域就像滚动条出现之前一样宽),滚动条就会消失.现在,如果我将它重新调整到原来的状态,它就会消失.

所以在我看来,系统中存在一个错误,其中最小宽度有点粘,但是升级和缩小窗口(使用鼠标,而不调整滚动条相关的API)可以清除条件

有人知道一个解决方法,或者我正在做什么来绊倒Windows?

Han*_*ant 5

是的,我认为你已经正确地诊断出了这个问题.这是一个令人讨厌的副作用,例如,垂直滚动条出现并需要空间,使可用的客户区域更小.太小而不适合控件,现在也会出现水平滚动条.它实际上是双稳态的,在某些情况下,水平条可以闪烁.

为了避免这种影响,布局引擎必须在布局中进行多次传递,以处理不断变化的客户区域.然而它只通过一次.这听起来很明智,这可能是一个永无止境的循环.我不知道对此有什么好处.您的用户可能只是调整窗口大小足以删除至少一个滚动条.


Lan*_*nce 5

这是Windows中的已知错误 - 这里

解决此问题的最佳方法是将表格布局面板自动调整到另一个面板中,该面板停靠在主窗体上并使用autoscroll = true进行设置

因此,您不再使用tablelayoutpanel滚动哪个有错误,您可以使用面板滚动并且tablelayoutpanel位于面板内


Jef*_*ata 2

我没有确切地注意到您所描述的行为,但遇到了垂直滚动条的外观使得水平滚动条成为必要的情况。

您可以设置面板的内容以允许滚动条的宽度,例如,如果我ListBox在 a 中有 a Panel

listBox1.Width = panel2.Width - System.Windows.Forms.SystemInformation.VerticalScrollBarWidth;
Run Code Online (Sandbox Code Playgroud)

华泰