DOBON.NET DOBON.NETプログラミング掲示板過去ログ

PropertyBindingにてClientSizeとLocationを設定した時のリサイズ挙動

環境/言語:[VB.NET2008SP1 .NETFramework3.5SP1]
分類:[.NET]

フォームの位置、サイズを保存させようと、PropertyBindingにてClientsizeとLocationを
指定しました。

この時、フォームの上辺または左辺でリサイズを行うと、通常右下を起点にしてリサイズされますが、
マウスドラッグ時にフォームが移動しているように見えます。
マウスボタンを離すと、リサイズした状態で表示されます。
PropertyBindingをどちらか片方のみにすると、この現象はなくなります。

この現象は違う環境2つにて確認していまして、私の固有の問題ではないのではないかと思っております。
なにか解決方法はないのでしょうか?

WindowsXP(VS2008Pro)とWindows7(VB2008Express)で確認しております。
いろいろ調べたところ、VS2005でのことでしたが
Locationが変化→LocationのGetが走る→ClientSizeのSetが走る
ClientSizeが変化→ClientSizeのGetが走る→LocationのSetが走る
というような動きをするみたいですので、フォームのLoadイベントにて

Me.DataBindings("ClientSize").ControlUpdateMode = ControlUpdateMode.Never
Me.DataBindings("Location").ControlUpdateMode = ControlUpdateMode.Never

と、フォームへの反映を止めたところ問題の挙動がなくなりました。
ただ、フォームを最小化し終了すると、次回起動時にフォームが見えない位置に表示されてしまいます。

ResizeイベントにてWindowStateを判断してデータソースへの反映も止めようと思い調べたところ
LocationのGet(X=-32000,Y=-32000)→Resizeイベント→ClientSizeのGet
となったため、この方法もダメでした。

Moveイベントを使用すると
Moveイベント(WindowState=Minimized)→LocationのGet
の順番になりましたのでMoveイベント内にて

If Me.WindowState = FormWindowState.Minimized Then
  Me.DataBindings("ClientSize").DataSourceUpdateMode = DataSourceUpdateMode.Never
  Me.DataBindings("Location").DataSourceUpdateMode = DataSourceUpdateMode.Never
Else
  Me.DataBindings("ClientSize").DataSourceUpdateMode = DataSourceUpdateMode.OnPropertyChanged
  Me.DataBindings("Location").DataSourceUpdateMode = DataSourceUpdateMode.OnPropertyChanged
End If

とすることで最小化時の終了にも対応できそうです。
ただ、ここまでしてBindingを利用するのと、自分でMy.Settingsの取得、反映をするのと天秤にかけると
後者のほうがいいような気はしますが・・・

一応これにて解決済みとさせていただきます。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板