1

少し問題があります。私はグーグルを見ようとしましたが、それは私に何も与えませんでした。グローバル フックを使用し、クリック時にマウス座標を取得する小さなプログラムを作成しました。問題はMouseDown、ボタンをクリックするだけで2番目のメソッドを作成したとき、MouseDownメソッドも実行されることです。

質問は次のとおりです: 2 つのメソッドを分割して、別々にのみ動作させるにはどうすればよいMouseClickですMouseDownか?

タイミングを使用する必要がありますか?何を使うべきかヒントをください。

PS 申し訳ありませんが、私の英語は得意ではありません。母国語ではありません。

ここにいくつかのコードがあります。概要を説明していると思います。

public void StartRecording()
{
    mouseListener = new MouseHookListener(new GlobalHooker());           

    mouseListener.Start();
    mouseListener.MouseClick += new MouseEventHandler(MouseClicked);
    mouseListener.MouseDown += new MouseEventHandler(MouseDown);                
}

public void MouseClicked(object sender, MouseEventArgs e)
{
    MessageBox.Show(String.Format("Mouse was pressed at  {0}, {1}",
                                  Control.MousePosition.X.ToString(),
                                  Control.MousePosition.Y.ToString()));
}

public void MouseDown(object sender, MouseEventArgs e)
{
    MessageBox.Show(String.Format("Mouse was down at  {0}, {1}",
                                  Control.MousePosition.X.ToString(),
                                  Control.MousePosition.Y.ToString()));
}
4

3 に答える 3

1

回避策として、 にフックする代わりに、MouseClickを使用してみてくださいMouseUp

次に、MouseDown現在の時刻をクラス レベルの変数に保存します (clickTimeこの例では)。もう一度MouseUp時間を確認してください。タイム スパンが長い場合は 3 秒と言います。マウス ダウンでやりたいことを行います。それ以外の場合は、マウス クリックで続行します。

    DateTime clickTime;
    public void MouseUp(object sender, MouseEventArgs e)
    {
        if (DateTime.Now - clickTime > someDelayTime)
        {
            // Do mouse down 
        }
        else
        {
            // Do mouse click
        }
    }

    public void MouseDown(object sender, MouseEventArgs e)
    {
        clickTime = DateTime.Now;
    }
于 2014-06-30T12:10:49.473 に答える
1

イベントではMouseDown、現在の時刻と座標を、それらが属するクラスに対してグローバルな変数に保存する必要があります。

次に、MouseUpイベントを使用して、マウス ボタンが離されたことを検出する必要があります。次に、新しい時間と座標を保存されているものと比較して、ボタンが押されていた時間と、その時間内にマウスが移動したかどうかを確認し、それに応じて行動することができます。

または、イベントを使用して、MouseMove必要に応じて時間と座標をリセットすることもできます。

于 2014-06-30T12:01:41.570 に答える