我的表单上有一个面板,AutoScroll设置为true,因此会自动显示滚动条。
如何使用户可以使用鼠标滚轮滚动面板?谢谢你。
答案 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中没有可滚动的内容。