2

C#(Forms.Controlから継承)でカスタムコントロールを作成しましたが、正常に機能しているようですが、ボタンをすばやく押すと問題が発生します。クリックするたびにクリックイベントハンドラーが呼び出されます。速く(1秒に1回未満)押さないと、これは起こりません。ボタンをクリックする速度に関係なく、mouseUpハンドラーとmouseDownハンドラーは常に呼び出されます。

もちろん、缶詰のWinFormボタンでは発生しません。

.net Compact Framework用のアプリケーションを作成しているため、既定のボタンを使用できません。そのため、UIをより見やすくするために、カスタムコントロールが必要です。また、フルバージョンの.net Frameworkでコードをテストしましたが、それでも同じ問題が発生します。

どんな助けでも大歓迎です。ありがとうございました!

4

2 に答える 2

1

十分に速くクリックしている場合は、DoubleClick領域に入っています。

上記の MSDN ページによると、イベントの順序は次のとおりです。

このようなユーザー アクションが発生すると、次の一連のイベントがコントロールによって発生します。

  1. マウスダウン イベント。
  2. クリックイベント。
  3. マウスクリック イベント。
  4. マウスアップ イベント。
  5. マウスダウン イベント。
  6. ダブルクリック イベント。
  7. MouseDoubleClick イベント。
  8. MouseUp イベント

Clickイベントは 1 つに 1 つしかありません。DoubleClick


無効にする方法については、 ControlStylesについて説明しているこの MSDN ページを参照してください。

上記のリンクから:

StandardClick -- true の場合、コントロールは標準のクリック動作を実装します。
StandardDoubleClick -- true の場合、コントロールは標準の DoubleClick 動作を実装します。StandardClick ビットが true に設定されていない場合、このスタイルは無視されます。

したがって、コントロール コンストラクターまたはロード イベントでこれを試してください。

this.SetStyle(ControlStyles.StandardClick, true );
this.SetStyle(ControlStyles.StandardDoubleClick, false);

SetStyleCompact Framework にはないように見えるので、DoublClick イベントを追加して、このようにプログラムで Click イベントをトリガーさせることができます。

YourClickEvent(sender, new MouseEventArgs(System.Windows.Forms.MouseButtons.Left,1,0,0,0));
于 2012-05-23T01:56:26.933 に答える
0

コントロールを十分に速くクリックすると、クリックではなくダブルクリックが呼び出されます。したがって、クリック関数で次のようなことを行う必要があります。

{
    control.Enabled = false; 
    ......
    control.Enabled = true;
}
于 2012-05-23T01:58:40.313 に答える