直到垂直滚动条需要(自动滚屏= TRUE),以空间内FLpanel,引起水平滚动条将出现在该变细.
你看到的乱码是我在元素的构造函数中生成的一些随机占位符文本.
我想防止这个:
我尝试向用户控件添加一个垂直滚动控件,并在Scroll事件中执行FlowLayoutPanel.VertScroll.Value = sender.value:它似乎起作用,但是当移动时,实际的垂直和水平滚动条闪烁(出现和消失)很多滚动条控件.
我真的不知道是否有一些属性使滚动条外部的FlowLayoutPanel控件的内容.
我在VB.Net这样做,但C#的回答都很好(因为它基本上是相同的语法,至少控制和放大器工作时,UI).
编辑
我忘了提到在FlowLayoutPanel中有WrapContents = false和AutoScroll = true.
另外,如果你认为这个设计很熟悉:它是一个像素完美的Opera M2的邮件列表屏幕的副本.
更新1
在你的意见后,我想出了这一点:
Public Class FlowListPanel ' The user control Private Sub Me_Load(sender As Object,e As EventArgs) Handles Me.Load FL_Panel.AutoScroll = True ' FL_Panel is the FlowLayoutPanel FL_Panel.WrapContents = False FL_Panel.Dock = System.Windows.Forms.DockStyle.Fill FL_Panel.FlowDirection = System.Windows.Forms.FlowDirection.TopDown FL_Panel.Margin = New System.Windows.Forms.Padding(0) End Sub Sub AddItem(c As Control) FL_Panel.Controls.Add(c) ReorderControls() End Sub Private Sub FLP_CSC(sender As Object,e As EventArgs) Handles FL_Panel.ClientSizeChanged ReorderControls() End Sub Sub ReorderControls() For Each ctrl In FL_Panel.Controls ctrl.Width = FL_Panel.ClientSize.Width Next End Sub Private Sub FL_Panel_L(sender As Object,e As LayoutEventArgs) Handles FL_Panel.Layout ReorderControls() End Sub End Class
它似乎工作,但是当达到垂直滚动条出现的临界点时,水平滚动条出现问题.
一旦添加了另一个项目,水平滚动条就会消失.
另外,我认为这个问题可以通过子不叫ReorderControls引起的,所以我做了一个按钮来调用它,但没有任何改变.
当窗口调整大小并且垂直滚动条必须出现时也会发生.
如下所示,添加新元素后,可以正常工作:
更新2
我按照Plutonix的提醒(适应代码from his other answer),所以我已经申请一些修改ReorderControls子,以这种方式:
Sub ReorderControls() Dim HScrollVis As Boolean = NativeMethods.IsHScrollVisible(FL_Panel) If HScrollVis Then ' HScroll visible -> kill it with fire! NativeMethods.ShowHideScrollBar(FL_Panel,NativeMethods.SBOrientation.SB_HORZ,False) Return ' as it works anyway... End If For Each ctrl In FL_Panel.Controls ctrl.Width = FL_Panel.ClientSize.Width Next End Sub
现在水平滚动条闪烁一次,而不是停留在那里,当垂直的一个出现.
我喜欢gifs,所以这里是现在的效果:
正如你可能无法看到(由于GIF的低帧率),单杠可能是明显的只是有人找它,因为几分之一秒.
我认为80%的问题解决了,而且会继续下去.如果我或某人想出了一些确定的东西,我会及时接受答案.
解决方法
而不是直接将您的控件添加到FowLayoutPanel中,
使用包含TableLayoutPanel的标准Panel对象.
将面板属性设置为…
自动滚屏=真
将TableLayoutPanel属性设置为
Dock = Top
Autosize = True,GrowAndSHrink
开始与TableLayoutPanel中的一个单元格..
现在把你的控件添加到TableLayoutPanel …
例如
Dim CTRL As New Your_User_Control TableLayoutPanel1.Controls.Add(CTRL) CTRL.Dock = DockStyle.Top
当滚动条出现时,TableLAyoutPanel将水平收缩适当的量,并且所有包含的控件也将自动缩小.