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

问题描述 投票:3回答:5

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

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

.net vb.net winforms user-interface .net-2.0
5个回答
3
投票

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

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


2
投票

我整天都在研究这个问题,我可能已经想到了这一点。鼠标滚轮事件仅发送到具有焦点的控件。面板无法聚焦。由于面板覆盖了用户控件,因此无法获得焦点。 (除非它是表单上的唯一控件)如果在面板mouseenter事件中我调用me.focus它将焦点设置为usercontrol,允许它接收mousewheel事件。事件在表单和控件中触发。如果有更好的方法,我仍然愿意接受建议,因为这看起来有点像hacky。


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以设置其焦点并使用滚轮。


1
投票

Here是一篇关于在vb.net中处理鼠标事件的文章。它特别提到了鼠标滚动。


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

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

© www.soinside.com 2019 - 2024. All rights reserved.