サイズ変更の際のちらつきを防ぐには?

解決


ジュークボックス  2009-02-27 12:12:23  No: 145796

お世話になります。

フォーム上にマウスがくるとサイズを変更したいと思います。
フォームにはボタンを貼り付けています。
ボタン上でもサイズ変更したいのでフォームと同じように
MouseEnterイベント、MouseLeaveイベントを用意しましたが、
実行すると希望する動作は得られますが、
フォームからボタンへのマウスの移動の際にちらつきがおきます。
以下にコードを示しますが、この方法以外によい方法がありましたらお教えください。
VB2005、WinXPです。

Private Sub frmMain_MouseEnter(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.MouseEnter, Button1.MouseEnter
Me.Width = 400
End Sub

Private Sub frmMain_MouseLeave(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.MouseLeave, Button1.MouseLeave
Me.Width = 300
End Sub


aetos  2009-02-27 20:59:13  No: 145797

「ボタン上でもサイズ変更」というのが、どういう動きを意図しているのかわかりません。
ボタンはフォーム上にあるので、ボタンに MouseEnter する時には既にフォームに MouseEnter しているはずで、改めてボタンの時にサイズ変更する必要はないのでは?


ジュークボックス  2009-02-28 05:57:09  No: 145798

aetosさんありがとうございます。
フォーム上からボタン上にマウスが動くとMouseLeaveイベントがおきます。
フォーム内のコントロールですので、私自身も何も気にしてませんでしたが
サイズが変更されるのでこういうコードになりました。
コントロールをたくさん貼り付けると大変だと思いますので何かよい方法
があればと思います。
よろしくお願いします。


はとや  2009-02-28 07:38:05  No: 145799

MouseMoveでも常時監視して
MouseLeaveの時に
直前の位置から
サイズ変更するかどうかを判断すればいいのでは?

#Enterのときも同様にする必要があるような気がしますね。


aetos  2009-02-28 09:29:26  No: 145800

> フォーム上からボタン上にマウスが動くとMouseLeaveイベントがおきます。

MouseLeave イベントが起きた時、ポインタがフォーム外にあるのか子コントロール上にあるのか判断して、フォーム外にある場合のみサイズを変更すればいいと思います。
Form の GetChildAtPoint メソッドが使えそうですね。


ジュークボックス  2009-03-01 06:26:53  No: 145801

MousePositionメソッドでフォーム内かどうかを調べ、
フォーム外の場合にサイズ変更という形でうまくいきました。
はとやさん、aetosさん本当にありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加