我正在vb.net中创建一个winforms应用程序,我有一个带有一些标签的面板。标签越过面板的底部,因此面板会自动显示一个垂直滚动条(这就是我想要的)。但是,每当我使用鼠标滚轮向下滚动面板时,当其中一个标签在鼠标下向上滚动时,它会停止滚动。这就像焦点从面板变为标签,标签不需要滚动。我想使用鼠标滚轮滚动整个面板,无论鼠标是什么。
答案 0 :(得分:1)
Panel控件无法具有焦点且无法选择。它只是一个容器。
您可以创建一个从Panel派生的自定义控件,并使其能够接收焦点
这在这种情况下有很大帮助,因为这样可以在没有任何其他逻辑的情况下滚动自定义面板
即使另一个通常可以获得焦点的控件(如TextBox)也会受到影响。
此实现修改了Panel控件Style(ControlStyles.Selectable
)以使其能够接受Focus(TabStop
属性也设置为True)。
OnMouseDown
也被覆盖,因此,如果Panel中的控件窃取了Focus,您只需要单击Panel将焦点移动到它上面然后滚动它。
Class PanelWithFocus
Inherits System.Windows.Forms.Panel
Public Sub New()
Me.SetStyle(ControlStyles.Selectable, True)
InitializeComponent()
End Sub
Protected Overrides Sub OnEnter(e As EventArgs)
MyBase.OnEnter(e)
Me.Focus()
End Sub
Protected Overrides Sub OnMouseDown(e As MouseEventArgs)
Me.Focus()
MyBase.OnMouseDown(e)
End Sub
Protected Sub InitializeComponent()
Me.AutoScroll = True
Me.BorderStyle = BorderStyle.None
Me.TabStop = True
End Sub
End Class
要在表单中插入此自定义控件,请在工具箱中找到它(在其顶部,查找名为PanelWithFocus
的控件)并将其放在表单上。
如果您想用现有的Panel替换现有的Panel,请打开Form.Designer
并使用Me.Panel1 = New System.Windows.Forms.Panel()
更改Me.Panel1 = New PanelWithFocus()
。
Friend WithEvents Panel1 As Panel
成为Friend WithEvents Panel1 As PanelWithFocus
答案 1 :(得分:0)
创建新的面板用户控件
Public Class PanelX
Inherits Panel
Public Sub New()
Me.AutoScroll = True
End Sub
Protected Overrides Sub OnMouseEnter(e As System.EventArgs)
Me.Select()
MyBase.OnMouseEnter(e)
End Sub
End Class
答案 2 :(得分:0)
尝试了这个对我好的工作
Public Sub New()
' This call is required by the designer.
InitializeComponent()
' Add any initialization after the InitializeComponent() call.
AddHandler MouseWheel, AddressOf Panel1_MouseWheel
End Sub
Private Sub Panel1_MouseWheel(sender As Object, e As MouseEventArgs) Handles Panel1.MouseWheel
Panel1.Focus()
End Sub