我的表单上有一个面板,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();
}
确保您的面板具有焦点。这是滚动面板滚动条的简单代码。希望这有帮助。:) 在此处输入代码
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;
}
在设计器文件中,您可以添加以下代码行。MouseWheel 事件未在“属性”窗口的“事件”列表中记录。
this.Panel1.MouseWheel+= System.Windows.Forms.MouseEventHandler(this.Panel1_MouseWheel);
Panel1_MouseWheel 将在您滚动鼠标时触发
在 .cs 文件中添加代码
我正在使用一个将 BorderStyle 设置为 none 的 windows 窗体,我使用一个面板来包含我的所有控件,所以它看起来不错(颜色差异等..)在我有其他工作正常的窗体时遇到了同样的问题。
我忘记了什么:
public myForm()
{
InitializeComponent();
this.DoubleBuffered = true;
}
我注意到双缓冲很神奇..
移动滚轮应触发控件的 MouseMove 事件。MouseEventArgs 参数有一个名为 Delta 的属性,它给出了鼠标滚轮移动的(有符号的)槽口数。您可以使用此属性来滚动面板。
在我的例子中,面板的整个客户区都被 UserControls 占据(除了滚动条之外,内部区域没有一个像素可见)。
在这种情况下,面板不会获得鼠标事件并且永远不会聚焦(显然,单击滚动条不算作“在面板内”)。
我必须将以下行添加到我的 UserControl 派生类的构造函数中:
MouseEnter += delegate {
Parent?.Focus();
};
现在它工作正常,因为我在 UserControls 中没有可滚动的内容。
Beam022 提供的解决方案(见上文)对我有用,而许多其他解决方案却没有。就我而言,我试图用鼠标滚轮事件滚动 DataGridView 控件。
正在调用 DataGridView_MouseWheel 事件处理程序,但 FirstDisplayedScrollingRowIndex 值从未更改。即使明确将其设置为 1,该值也始终为“0”。就好像该属性是只读的。
仍然在 .Net Framework 4.6 中重现。