38

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

我怎样才能使用户可以使用鼠标滚轮滚动面板?谢谢。

4

9 回答 9

59

对我有用的是添加panel1_MouseEnterEventHandler:

private void panel1_MouseEnter(object sender, EventArgs e)
{
    panel1.Focus();
}
于 2012-01-31T20:52:07.480 回答
30

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

于 2009-10-21T13:10:43.927 回答
16

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

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

 private void Panel1_MouseWheel(object sender, MouseEventArgs e)
        {
         panel1.Focus();
         }
于 2011-01-22T05:58:00.440 回答
3

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

int deltaScroll = 10;

if (e.Delta > 0)
{

    if (pnlContain.VerticalScroll.Value - deltaScroll >= pnlContain.VerticalScroll.Minimum)
        pnlContain.VerticalScroll.Value -= deltaScroll;
    else
        pnlContain.VerticalScroll.Value = pnlContain.VerticalScroll.Minimum;
}
else
{
    if (pnlContain.VerticalScroll.Value + deltaScroll <= pnlContain.VerticalScroll.Maximum)
        pnlContain.VerticalScroll.Value += deltaScroll;
    else
        pnlContain.VerticalScroll.Value = pnlContain.VerticalScroll.Maximum;
}
于 2013-06-25T14:31:28.557 回答
2

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

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

Panel1_MouseWheel 将在您滚动鼠标时触发

在 .cs 文件中添加代码

于 2009-12-08T05:14:33.213 回答
1

我正在使用一个将 BorderStyle 设置为 none 的 windows 窗体,我使用一个面板来包含我的所有控件,所以它看起来不错(颜色差异等..)在我有其他工作正常的窗体时遇到了同样的问题。

我忘记了什么:

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

我注意到双缓冲很神奇..

于 2014-12-24T19:26:02.253 回答
0

移动滚轮应触发控件的 MouseMove 事件。MouseEventArgs 参数有一个名为 Delta 的属性,它给出了鼠标滚轮移动的(有符号的)槽口数。您可以使用此属性来滚动面板。

于 2009-10-21T13:14:44.547 回答
0

在我的例子中,面板的整个客户区都被 UserControls 占据(除了滚动条之外,内部区域没有一个像素可见)。

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

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

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

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

于 2018-01-23T02:49:50.330 回答
0

Beam022 提供的解决方案(见上文)对我有用,而许多其他解决方案却没有。就我而言,我试图用鼠标滚轮事件滚动 DataGridView 控件。

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

仍然在 .Net Framework 4.6 中重现。

于 2015-08-05T23:17:43.620 回答