tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
[ツリー表示へ]  [ワード検索]  [Home]

タイトル 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

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。