ドラッグ可能なコントロール (A) があり、その中にボタンがあります。A には他のコントロールもあります。つまり、ボタンは A を埋めません。
ドラッグ機能を管理するために、コントロール (A) はすべてのMouseDown
イベントをキャプチャします。その後、マウスの移動距離に基づいてドラッグを開始するかどうかを決定します。
ボタンがクリックMouseUp
され、ドラッグが開始される前にイベントが受信された場合、ボタンのイベントが発生するようにしたいと思いますClick
。
現時点では、MouseUp
イベントは親コントロール (A) によってキャプチャされるため、これは発生しません。これを手動で処理するために、 A に機能を実装できます。
private void MouseUp(object sender, MouseEventArgs e) {
if (DragHasStarted) {
DealWithDrag();
}
else {
DelegateToChildControls();
}
}
DelegateToChildControls
ただし、どの子に委譲するかを決める必要があるため、これは複雑で、うまくスケーリングできません。
親コントロールがイベントを処理しない場合、Windows にこれを処理させ、ボタンの Click メソッドを直接呼び出す方法はありMouseUp
ますか?
編集 - イベント シーケンスの詳細:
ボタンをクリックすると、次の一連のイベントが表示されます。
MouseDown
オンボタンMouseDown
on Button (ドラッグ ハンドラ)- これをボタンの親に転送します
MouseDown
親 (ドラッグ ハンドラ)- 親によってキャプチャされたマウス (ドラッグ ハンドラ)
MouseUp
親に- ドラッグの終了 (ドラッグ ハンドラ)
MouseUp
ボタンにイベントが表示されません。