- 題名: フォームの移動について
- 日時: 2004/08/21 1:51:45
- ID: 5724
- この記事の返信元:
- (なし)
- この記事への返信:
- [5727] Re[1]: フォームの移動について2004/08/21 18:17:02
- [5948] Re[1]: フォームの移動について2004/09/01 13:01:41
- ツリーを表示
■No5724に返信(tatsuyaさんの記事) tatsuyaさん、こんにちは。深山と申します。 その後レスがないところを見ると、ひろさんのされた回答で十分だったのかも知れませんけども > フォームの移動完了後に というのが気になったので実験してみました。 # いや、相当今更だとは思うのですが(^_^;) 『移動が完了する』というのは『移動した後、一定時間以上移動しない』と見做すことが できるのでは? そんな観点から試してみたのが次のコードです。タイマ コントロールを 配置し、 Interval プロパティには適当な値を設定しました。 Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick Timer1.Enabled = False MessageBox.Show("フォームが移動されました") End Sub Private Sub Form1_Move(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Move Timer1.Enabled = False Timer1.Enabled = True End Sub で、動かしたところ‥‥起動時にもメッセージが表示される、最小化など WindowState が 変化したときにもメッセージが表示される、タイトルバーをドラッグ中(=移動中)でも メッセージが表示されると散々でした(汗) 一つ目のは Visible プロパティが False のときにはタイマを起動しないことで回避できますし、 二つ目のは移動と言えなくもありません(ぇ)。でも最後のは致命的ですよね。メッセージ表示後に 移動開始時の位置に戻ってしまう(しかもそれによって再度メッセージが表示されてしまう) のですから‥‥(ーー;) どうやら方向性を変えた方が良さそうだと思い Spy++ で監視してみたところ、移動完了時には WM_EXITSIZEMOVE メッセージが通知されることが判りました。 http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/WinUI/WindowsUserInterface/Windowing/Windows/WindowReference/WindowMessages/WM_EXITSIZEMOVE.asp そこで書いたのが次のコードです。 Private Const WM_EXITSIZEMOVE As Integer = &H232 Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message) Select Case m.Msg Case WM_EXITSIZEMOVE MessageBox.Show("フォームが移動されました") End Select MyBase.WndProc(m) End Sub これなら問題はないかと思うのですが如何でしょう? # 勿論、これだけだとフォームのサイズを変更したときにもメッセージが表示されてしまいますし # コード上で直接 Location (若しくは Left 、 Top )プロパティの値を変更したときには # メッセージが表示されませんけど。
分類:[.NET]
フォームが移動されたことを監視したいのですが,
どのようにすれば良いでしょうか.
例えば,
フォームの移動完了後に
「フォームが移動されました」とかを表示したいです.