14

スクロールバーでコントロール(ListBox、Panel、TextBox)を使用している場合、MouseWheelイベントは発生しません。

問題を再現するには:

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();
  }
 }
4

4 に答える 4

15

私は同じ問題を抱えていました。私にとってうまくいったのは、フォーカスの有無にかかわらずトリガーされるイベントMouseEnterのハンドラーをコントロールに追加することでした。

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

その後、mouseWheelイベントを問題なく取得できました。

于 2012-02-13T19:36:20.450 に答える
2

私は解決策を見つけました、敏捷性はデフォルトの「マウス構成」です。LenovoUSBオプティカルホイールマウスのデフォルト構成は次のとおりです。

コントロールパネル/マウス/ホイール/ホイール->ユニバーサルスクロールを有効にする;

私はに変更しました:

コントロールパネル/マウス/ホイール/ホイール-> MicrosoftOffice97スクロールエミュレーションのみを使用

現在、.netコードではMouseWheelがFocusedControlで動作してます


しかし、質問は次のとおりです。

  • どうすれば.netコードで修正できますか?
  • .netコードでこの状況を検出するにはどうすればよいですか?

何か案は ?

于 2010-01-20T08:26:53.177 に答える
2

通常、MouseWheelイベントを処理するコントロールがアクティブであることを確認する必要があります。

たとえばbutton1.Select()、Form Load(またはShown)イベントを呼び出してから、スクロールホイールを使用してみてください。

例えば:

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

    button1.Select();  
}
于 2010-01-19T15:09:27.247 に答える
0

あなたの例を試してみましたが、行がコメントされているかどうかに関係なく、MouseWheelイベントはボタンがフォーカスされている場合にのみ発生します。この動作は仕様によるものです。(MouseWheelキーボードイベントと同様に、イベントはフォーカスされたコントロールに移動します)

于 2010-01-19T15:16:41.210 に答える