我有一个我创建的用户控件。我在其右侧添加了一个面板和一个垂直滚动条。我希望能够用鼠标滚轮滚动它。问题是鼠标轮上似乎没有发生任何事件。如果我关闭面板,则usercontrol具有焦点,它将在窗体中的鼠标滚轮上触发。但是面板上的面板似乎没有触发面板的鼠标滚轮事件,或控件内甚至窗体上的用户控件。最好的解决方案是在用户控件中触发事件,但我甚至接受表单上的事件并将其反馈给用户控件。
如果重要的话,我正在使用vb.net和vs2005。
答案 0 :(得分:3)
是的,专家组可以有焦点。你只需要专注,我更喜欢鼠标悬停。
我这样做了,问题解决了。
答案 1 :(得分:2)
将以下代码放在表单
的load事件中For i As Integer = 1 To 100
Dim b As New Button()
b.Text = i.ToString()
b.Size = New Size(60, 40)
b.Location = New Point(0, (i * b.Height) - b.Height)
b.Parent = Panel1
Panel1.Controls.Add(b)
Next
运行项目。
您应该在Panel控件中看到一个包含100个按钮的表单 Panel控件应包含一个垂直ScrollBar 使用面板内的滚轮应滚动按钮。
希望这个例子有所帮助。
修改强>
我在其右侧添加了一个面板和一个垂直滚动条。
这不是正确的做法。
您需要使用Panel的AutoScroll
属性。
修改强>
另一个例子:
将以下代码粘贴到表单加载事件
中Dim uc As New UserControl1
uc.Parent = Me
Me.Controls.Add(uc)
uc.Size = New Size(100, 100)
uc.Location = New Point(0, 0)
For i As Integer = 1 To 100
Dim b As New Button()
b.Text = i.ToString()
b.Size = New Size(60, 40)
b.Location = New Point(0, (i * b.Height) - b.Height)
b.Parent = uc
uc.Controls.Add(b)
Next
运行程序。
单击按钮(在表单上) 请注意,您必须单击UserControl以设置其焦点并使用滚轮。
答案 2 :(得分:2)
我整天都在研究这个问题,我可能已经想到了这一点。鼠标滚轮事件仅发送到具有焦点的控件。面板无法聚焦。由于面板覆盖了用户控件,因此无法获得焦点。 (除非它是表单上的唯一控件)如果在面板mouseenter事件中我调用me.focus它将焦点设置为usercontrol,允许它接收mousewheel事件。事件在表单和控件中触发。如果有更好的方法,我仍然愿意接受建议,因为这看起来有点像hacky。
答案 3 :(得分:1)
Here是一篇关于在vb.net中处理鼠标事件的文章。它特别提到鼠标滚动。
答案 4 :(得分:1)
您还可以添加以下代码行:
private void UserControl1_Scroll(object sender, ScrollEventArgs e)
{
System.Diagnostics.Debug.WriteLine(System.DateTime.Now.ToString("hh:mm:ss") + " Scrolling inside" + e.NewValue + " <- " + e.OldValue);
this.VerticalScroll.Value = e.NewValue;
}
这使您可以在向上和向下移动滚动条时查看控件中的项目。如果没有它,控件仅在释放滚动条时滚动。