2010-01-19 173 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事件。

相關問題