タイトル : Resizeイベントが複数回発生する 投稿日 : 2016/12/14(Wed) 17:08 投稿者 : 皆月
知恵を貸して下さい。 フォーム上にラベル等を70個ぐらい貼ったフォームを最大化ボタンを使用して最大化⇔通常化しています。 フォームサイズを変更した時にラベルのサイズ等を変更したいのでAncherやDockを試しましたが 設定が悪いのか思い通りの動作をしないので自分でそれっぽい処理を書きました。 が、フォーム上のラベルが20個程度なら問題ないのですが70個を超えてくると フォーム最大化状態→フォーム通常状態にした時にResizeイベントが複数回(3〜5回)発生して 再表示処理でパラパラ漫画のようになり、その後フォームレイアウトがぐっちゃぐちゃになります。 Q1.フォーム最大状態→フォーム通常サイズ化 時は1回だけ処理を 行うようにするにはどうすれば良いでしょう? Q2.この際だから大人しくAncherとDockを理解したほうがよいものでしょうか? よろしく御願いします。 Windows7 64bit 開発環境:VisualBasic2010 Express / NetFramework3.5用アプリケーション *****ここから現在のソフト***** Private bufHeight As Integer Private bufWidth As Integer Private Sub frmMain_Load(sender As Object, e As System.EventArgs) Handles Me.Load Me.FormBorderStyle = Windows.Forms.FormBorderStyle.FixedSingle 'つまんでサイズ変更禁止 bufHeight = Me.Height bufwidth = Me.Width end sub Private Sub frmMain_Resize(sender As Object, e As System.EventArgs) Handles Me.Resize Debug.Print("{0}サイズ変更イベント発生", Now) Dim ScaleChg As Double = CDbl(Me.Width / bufWidth) '倍率 bufHeight = Me.Height 'フォームサイズを保持 bufWidth = Me.Width 'コントロールのサイズ変更 For Each c As Control In Me.Controls Try c.Top = CInt(c.Top * ScaleChg) c.Left = CInt(c.Left * ScaleChg) c.Height = CInt(c.Height * ScaleChg) c.Width = CInt(c.Width * ScaleChg) c.Font = New Font(c.Font.FontFamily, _ CInt(CDbl(c.Font.Size) * ScaleChg), c.Font.Style) Catch ex As Exception '何もしない。 End Try Next c End Sub |