4

私はC#に比較的慣れていません。ボタン付きのウィンドウがあります。ウィンドウがフォーカスされていないときにボタンを初めてクリックすると、最初のクリックでウィンドウのフォーカスが取得され、その後のすべてのクリックでそれぞれのアクションが実行されます。

フォーカスを取得する代わりに、ボタンに関連付けられたイベントを実行する方法はありますか?

4

4 に答える 4

11

アプリケーションにフォーカスがない限り、クリックイベントを発生させない ToolStrips の動作方法を説明しているようです。

回避策は、独自の ToolStrip を使用し、マウスのアクティブ化でコントロールにフォーカスを与えることです。これにより、ボタンのクリック イベントが発生します。

public class ToolStripIgnoreFocus : ToolStrip {
  private const int WM_MOUSEACTIVATE = 0x21;

  protected override void WndProc(ref Message m) {
    if (m.Msg == WM_MOUSEACTIVATE && this.CanFocus && !this.Focused)
      this.Focus();

    base.WndProc(ref m);
  }
}

ソリューションを再構築するとToolStripIgnoreFocus、ツール ボックスに使用可能なコントロールが表示されます。それをフォームに追加してから、それに応じてツールボタンを追加してみてください。

于 2012-07-04T01:13:43.293 に答える
0

これは通常の Windows の動作です。オーバーライドできるとは思わないもの(クリックイベントが発生するが、アプリをフォアグラウンドおよびアクティブ状態にしないようにするため)。

ウィンドウにフォーカスを移したくないが、ウィンドウ自体との「相互作用」を提供したい場合は、キーボード フックまたはホットキー イベントを試してください。例:

于 2012-07-04T01:02:42.643 に答える
0

これは、ほとんどの Windows アプリが動作する方法です。クリック イベントを受け取る前に、アプリにフォーカスが必要です。

于 2012-07-04T00:51:55.133 に答える
0

私の知る限り、あなたは Windows 固有の動作について説明しましたが、それは不可能かもしれません。

別の方法は、ここで説明されている Windows アプリの「常に最上位」スタイルを利用することです。

ウィンドウを.Netで常に一番上に置く方法は?

于 2012-07-04T00:53:04.320 に答える