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

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

有帮助吗?

解决方案

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

其他提示

对我有用的是添加 panel1_MouseEnter EventHandler:

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

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

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

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

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

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

滚动鼠标时会触发Panel1_MouseWheel

在.cs文件中添加代码

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

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

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

我忘记了什么:

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

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

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

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

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

仍然在.Net Framework 4.6中重现。

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

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

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top