- - PR -
つまんで移動するコントロール
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2003-07-18 19:09
お世話になっております。
コントロールにつまんで移動できる機能を加えているのですが、OnMouseMove 中でLocationプロパティを変更すると続けてOnMouseMoveが呼ばれ続けて 非常に見苦しい状態になってしまいます。再帰的に呼ばれるわけでもなければ、 次の呼び出しを無視すればいいというわけでもなく困っております。どなかた 回避方法を教えていただけないでしょうか。 よろしくお願いいたします。 |
|
投稿日時: 2003-07-19 23:52
マウスではなくD&D(ドラッグアンドドロップ)の機能を使ってはどうでしょうか?
マウスは移動中、常にイベントが発生しますが、D&Dの場合、イベントは、ドラッグ開始とドロップ時のみしか発生しないので、解決できると思います。 |
|
投稿日時: 2003-07-23 11:47
お返事ありがとうございます。
ドラッグ中の座標に描画しなければならないので残念ながらD&Dは使うことができま せんでした。(もしかしたら、私の知らない関数があるのかもしれませんが) なんとかなった、、、だけではあれですので、原因を書いておきたいと思います。 原因は座標の計算の部分で、Locationプロパティを変更すれば続けてOnMouseMove が呼ばれてしまいますが、2度目のOnMouseMove内でLocationプロパティと同じ値が セットされるようにOnMouseMove中を記述すれば無限に関数が呼ばれつづけることは 避けられるようです。 bool isDrag; Point dragPoint; protected override void OnMouseDown(MouseEventArgs e) { base.OnMouseDown (e); isDrag = true; this.Capture = true; dragPoint = new Point(e.X, e.Y); } protected override void OnMouseMove(MouseEventArgs e) { base.OnMouseMove (e); if (isDrag) { ++moveCount; this.Location = new Point(this.Location.X + e.X + -dragPoint.X, this.Location.Y + e.Y + -dragPoint.Y); this.Parent.Text = moveCount.ToString(); this.Invalidate(); } } protected override void OnMouseUp(MouseEventArgs e) { base.OnMouseLeave (e); this.Capture = false; isDrag = false; } [ メッセージ編集済み 編集者: やました 編集日時 2003-07-23 11:48 ] [ メッセージ編集済み 編集者: やました 編集日時 2003-07-23 11:54 ] |
1