2010-01-19 66 views
13

MouseWheel事件不会触发 。当使用任何带有滚动条的控件(ListBox,Panel,TextBox)和滚动条时,鼠标滚轮事件不会触发(在C#Windows窗体中)

要重现问题:

public class Form1 : Form 
{ 
    private readonly Button button1; 
    private readonly TextBox textBox1; 

    private void button1_MouseWheel(object sender, MouseEventArgs e) 
    { 
    ToString(); // doesn't fire when uncomment lines below 
    } 

    public Form1() 
    { 
    button1 = new Button(); 
    textBox1 = new TextBox(); 
    SuspendLayout(); 

    button1.Location = new System.Drawing.Point(80, 105); 
    button1.Size = new System.Drawing.Size(75, 23); 
    button1.MouseWheel += button1_MouseWheel; 
    button1.Click += button1_Click; 

    textBox1.Location = new System.Drawing.Point(338, 105); 
    //textBox1.Multiline = true; // uncomment this 
    //textBox1.ScrollBars = ScrollBars.Vertical; // uncomment this 
    textBox1.Size = new System.Drawing.Size(100, 92); 

    ClientSize = new System.Drawing.Size(604, 257); 
    Controls.Add(textBox1); 
    Controls.Add(button1); 
    ResumeLayout(false); 
    PerformLayout(); 
    } 

    // Clicking the button sets Focus, but even I do it explicit Focus() or Select() 
    // still doesn't work 
    private void button1_Click(object sender, System.EventArgs e) 
    { 
    button1.Focus(); 
    button1.Select(); 
    } 
} 
+0

也许问题是鼠标, 我使用“联想USB光电鼠标” (默认配置 “线轮按钮”功能“快速/自动滚动”) – halorty 2010-01-20 07:32:49

+0

我使用:Windows Vista中商务大,.Net框架3.5 SP1 ,Visual Studio 2008标准版(所有官方修补程序)。构建调试:目标框架= .Net Framework 3。5,输出类型= Windows应用程序 – halorty 2010-01-20 08:09:41

+0

鼠标配置: 控制面板/鼠标/滚轮/轮 - >启用通用滚动; 控制面板/鼠标/车轮/车轮按钮 - >快速/自动滚动; 控制面板/鼠标/滚轮/滚动速度 - >滚动=每行10行; – halorty 2010-01-20 08:14:24

回答

2

我发现解决方案,gility是默认的“鼠标配置”。 联想USB光电鼠标默认配置为:

控制面板/鼠标/滚轮/ Whell->启用通用滚动;在.NET代码鼠标滚轮

控制面板/鼠标/轮/ Whell->使用Microsoft Office 97滚动仿真仅

现在用重点控制工作:

我改。


但问题是:

  • 我怎样才能修复它在.NET代码?
  • 如何在.net代码中检测到这种情况?

任何想法?

+0

使用间谍++,并检查其消息被发送到控件。 – SLaks 2010-01-20 14:09:12

2

通常你需要确保控制要处理鼠标滚轮事件被激活。

例如,尝试在表单加载(或显示)事件中调用button1.Select(),然后使用滚轮。

如:

private void Form1_Load(object sender, EventArgs e) 
{ 
    button1.MouseWheel += new MouseEventHandler(button1_MouseWheel); 

    button1.Select(); 
} 
+0

还是一样,同样的问题,这很奇怪,但在我的情况下它不起作用。即使我设置焦点或选择,并且光标在buton1上,当我使用鼠标滚轮时,它滚动textbox1(原文如此!) – halorty 2010-01-20 07:26:39

0

我想你的榜样,而且,该线是否被评论与否,鼠标滚轮事件仅触发如果按钮被聚焦。此行为是设计使然。 (MouseWheel事件,如键盘事件,进入集中控制)

+0

我阅读了关于我的文档,但它非常奇怪, 但在我的情况下它不起作用: 我加入代码: public Form1() { (...) button1.Click + = button1_Click; (...) } private void button1_Click(object sender,System.EventArgs e) { button1.Focus(); } 不工作,甚至我设置焦点,并且光标在buton1, 当我使用鼠标滚轮,它滚​​动TextBox1的(原文如此!) – halorty 2010-01-20 07:23:07

12

我遇到了同样的问题,对我来说有效的是为控件中的MouseEnter事件添加了一个处理程序,该程序使用或不使用焦点触发。

private void chart1_MouseEnter(object sender, EventArgs e) 
{ 
    chart1.Focus(); 
} 

之后,我可以得到没有问题的mouseWheel事件。

相关问题