0

パネルを使ってカスタムコントロールを作成しています。ドラッグアンドドロップできるようにしたいので、コントロールのMouseDownイベントに実装しました。しかし、ドラッグを開始したときに反応して、ユーザーに少しフィードバックを与えたいと思います。だから、MouseDownでは色を変えても。次に、MouseUpイベントで元に戻します。

私のコントロールはVS2008にインストールされていませんが、実行時にインスタンス化するように作成したクラスだけです(必要な数などは事前にわかりません)。これで、私のコントロールはドラッグできるようにMouseDownイベントを公開します。親アプリケーションからこのイベントをサブスクライブして実際にドラッグアンドドロップを実行すると、コントロールはそのMouseUpイベントで再描画されません。実際、MouseUpが呼び出されることはありません。一方、親アプリでイベントをサブスクライブしない場合は、意図したとおりに機能します。

どうしたの?私のコントロールでMouseUpイベントが発生しないように、親はフローを中断していますか?これを回避するにはどうすればよいですか?

4

2 に答える 2

2

Windows フォームまたは WPF を使用しているかどうかはわかりませんが、Windows フォームでは次のようになります。

public class DerivedPanel : パネル
{
    protected override void OnMouseDown(MouseEventArgs e)
    {
        base.OnMouseDown(e);
        キャプチャ = true;
    }

    protected override void OnMouseUp(MouseEventArgs e)
    {
        base.OnMouseUp(e);
        キャプチャ = false;
        // ここで色などを変更します
    }
}

WPF には、同じことを行う CaptureMouse() と ReleaseMouseCapture() の 2 つのメソッドがあります。コントロールがマウスをキャプチャすると、カーソルがコントロール上になくてもマウス イベントを受け取ります。これが問題を引き起こしている可能性があります。MSDN の記事を参照してください

于 2009-02-05T15:15:36.000 に答える
0

mousedownイベントのカスタムコントロールでマウスをキャプチャしますか?マウスダウンでキャプチャし、マウスアップでキャプチャを解放してみてください。

于 2009-02-04T20:36:54.000 に答える