如何使用鼠标滚轮滚动面板?

时间:2009-10-21 12:57:40

标签: c# scroll panel mousewheel

我的表单上有一个面板,AutoScroll设置为true,因此会自动显示滚动条。

如何使用户可以使用鼠标滚轮滚动面板?谢谢你。

9 个答案:

答案 0 :(得分:55)

对我有用的是添加panel1_MouseEnter EventHandler:

private void panel1_MouseEnter(object sender, EventArgs e)
{
    panel1.Focus();
}

答案 1 :(得分:28)

面板或面板中的控件必须具有焦点。请注意,如果具有焦点的控件具有滚动条,则它将滚动而不是面板。

答案 2 :(得分:15)

下面的代码对我有用.....

    Public Form
{
InitializeComponent();  
this.MouseWheel += new MouseEventHandler(Panel1_MouseWheel);
}

 private void Panel1_MouseWheel(object sender, MouseEventArgs e)
        {
         panel1.Focus();
         }

答案 3 :(得分:2)

在设计器文件中,您可以添加以下代码行。 MouseWheel事件未在“属性”窗口的“事件”列表中显示。

this.Panel1.MouseWheel+= System.Windows.Forms.MouseEventHandler(this.Panel1_MouseWheel);

滚动鼠标时会触发Panel1_MouseWheel

在.cs文件中添加代码

答案 4 :(得分:2)

确保您的面板具有焦点。这是滚动面板滚动条的简单代码。希望这有帮助。 :)     在这里输入代码

        if(e.Delta > 0)
        {

            if (pnlContain.VerticalScroll.Value - 2 >= pnlContain.VerticalScroll.Minimum)
                pnlContain.VerticalScroll.Value -= 2;
            else
                pnlContain.VerticalScroll.Value = pnlContain.VerticalScroll.Minimum;
        }
        else
        {
            if (pnlContain.VerticalScroll.Value + 2 <= pnlContain.VerticalScroll.Minimum)
                pnlContain.VerticalScroll.Value += 2;
            else
                pnlContain.VerticalScroll.Value = pnlContain.VerticalScroll.Maximum;
        }

答案 5 :(得分:1)

我正在使用一个将BorderStyle设置为none的窗体,我使用面板将所有控件都放入其中,所以看起来不错(色差等等)有同样的问题,而我有其他形式工作得很好。

我忘记了什么:

   public myForm()
   {
        InitializeComponent();
        this.DoubleBuffered = true;
   }

DoubleBuffered很神奇,我注意到了..

答案 6 :(得分:0)

移动滚轮应触发控件的MouseMove事件。 MouseEventArgs参数具有名为Delta的属性,该属性提供鼠标滚轮已移动的(带符号)凹槽数。您可以使用此属性滚动面板。

答案 7 :(得分:0)

Beam022提供的solution(如上所示)对我有用,而其他许多解决方案都没有。在我的例子中,我试图用mousewheel事件滚动DataGridView控件。

正在调用DataGridView_MouseWheel事件处理程序,但FirstDisplayedScrollingRowIndex值从未更改过。即使在将其明确设置为1之后,该值始终为“0”。就好像该属性是只读的一样。

仍然在.Net Framework 4.6中重现。

答案 8 :(得分:0)

在我的情况下,面板的整个客户区域被UserControls占用(除了滚动条之外,内部区域的单个像素不可见)。

在这种情况下,面板不会获得鼠标事件并且永远不会聚焦(显然,单击滚动条不会算作“在面板内”)。

我必须将以下行添加到UserControl派生类的构造函数中:

MouseEnter += delegate {
   Parent?.Focus();
};

现在它工作正常,因为我在UserControls中没有可滚动的内容。