首页 > 解决方案 > 如何在不使用滚动条 Winforms 的情况下使用 Mouse_Wheel 事件在面板中向上或向下滚动

问题描述

例子:

我有一个Panel左右flowLayoutpanel我想在不使用滚动条的情况下滚动查​​看项目,而不是我想使用 MouseWheel

所以我想知道有什么方法可以在面板或 flowLayoutPanel 中向上或向下滚动

如果不使用'Auto Scroll= true',我想在鼠标滚动时向上或向下移动 ViewPanel。

如果你明白我的意思

这些是我使用的一些代码,但似乎根本不起作用

--Sameple1

 void Panel2_mWheel(object sender, MouseEventArgs e)
        {

            //Get cursor position
            Point mousePoint = new Point(e.X, e.Y);

            //Change to the location of the form of this form
            mousePoint.Offset(this.Location.X, this.Location.Y);

            if (panel2.RectangleToScreen(panel2.DisplayRectangle).Contains(mousePoint))
            {
                Console.WriteLine("Contain");
                panel2.AutoScrollPosition = new Point(0, panel2.VerticalScroll.Value - e.Delta);
            }
        }

--样本2

 Panel.MouseEnter += C_MouseEnter;
  void Panel_MouseEnter(object sender, EventArgs e)
  {
      c.Focus();
                
  }

--sample3

panel.MouseWheel += pn_MouseWheel;

private void pn_MouseWheel(object sender, MouseEventArgs e)
{
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;
}

--样本4

panel_wheel(object sender, MouseEventArgs e)
{
     if(e.OldValue>e.NewValue)
     {
         //Scroll up Do stuff
     }
     else
     {
         //Scroll down Do stuff
     }

}    

请任何人帮助我!

标签: c#winformsscrollviewmouseeventpanel

解决方案


推荐阅读