需要鼠标滚动滚动用户控件

时间:2009-03-04 20:23:05

标签: .net vb.net winforms user-interface .net-2.0

我有一个我创建的用户控件。我在其右侧添加了一个面板和一个垂直滚动条。我希望能够用鼠标滚轮滚动它。问题是鼠标轮上似乎没有发生任何事件。如果我关闭面板,则usercontrol具有焦点,它将在窗体中的鼠标滚轮上触发。但是面板上的面板似乎没有触发面板的鼠标滚轮事件,或控件内甚至窗体上的用户控件。最好的解决方案是在用户控件中触发事件,但我甚至接受表单上的事件并将其反馈给用户控件。

如果重要的话,我正在使用vb.net和vs2005。

5 个答案:

答案 0 :(得分:3)

是的,专家组可以有焦点。你只需要专注,我更喜欢鼠标悬停。

我这样做了,问题解决了。

答案 1 :(得分:2)

  • 创建一个新的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以设置其焦点并使用滚轮。

答案 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;
    }

这使您可以在向上和向下移动滚动条时查看控件中的项目。如果没有它,控件仅在释放滚动条时滚动。