需要鼠标滚动滚动用户控件
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了需要鼠标滚动滚动用户控件相关的知识,希望对你有一定的参考价值。
我有一个我创建的用户控件。我在其右侧添加了一个面板和一个垂直滚动条。我希望能够用鼠标滚轮滚动它。问题是鼠标轮上似乎没有发生任何事件。如果我关闭面板,则usercontrol具有焦点,它将在窗体中的鼠标滚轮上触发。但是面板上的面板似乎没有触发面板的鼠标滚轮事件,或控件内甚至窗体上的用户控件。最好的解决方案是在用户控件中触发事件,但我甚至接受表单上的事件并将其反馈给用户控件。
如果重要的话,我正在使用vb.net和vs2005。
是的,一个小组可以有焦点。你只需要专注,我更喜欢鼠标悬停。
我这样做了,问题解决了。
我整天都在研究这个问题,我可能已经想到了这一点。鼠标滚轮事件仅发送到具有焦点的控件。面板无法聚焦。由于面板覆盖了用户控件,因此无法获得焦点。 (除非它是表单上的唯一控件)如果在面板mouseenter事件中我调用me.focus它将焦点设置为usercontrol,允许它接收mousewheel事件。事件在表单和控件中触发。如果有更好的方法,我仍然愿意接受建议,因为这看起来有点像hacky。
- 创建一个新的VB.NET Winforms项目
- 在表单上放置一个Panel控件
- 将面板的“AutoScroll”属性设置为“true”
- 将以下代码放在窗体的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
属性。
编辑 另一个例子:
- 创建一个新的VB.NET项目
- 在表单上放置两个按钮
- 创建一个新的usercontrol
- 将usercontrol的autoscroll属性设置为true
- 将以下代码粘贴到表单加载事件中
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以设置其焦点并使用滚轮。
Here是一篇关于在vb.net中处理鼠标事件的文章。它特别提到了鼠标滚动。
您还可以添加以下代码行:
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;
}
这允许您在向上和向下移动滚动条时查看控件中的项目。没有它,控件仅在释放滚动条时滚动。
以上是关于需要鼠标滚动滚动用户控件的主要内容,如果未能解决你的问题,请参考以下文章
界面控件 - 滚动条ScrollBar(对滚动条消息和鼠标消息结合讲的不错)