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

タイトル Re^5: フォームのResizeイベントについて
投稿日: 2006/02/13(Mon) 11:21
投稿者しょうだい
花ちゃん、ありがとうございます。返信遅くなりすみません。

> 下記のようにして見ては。
> Private Sub Form1_Load(ByVal sender As System.Object, _
>                        ByVal e As System.EventArgs) Handles MyBase.Load
>     SuspendLayout()
>     '初期設定等の処理を記述
>     '(この間は、コントロールのレイアウトの変更を通知するイベントを抑止する)
>     ResumeLayout()
> End Sub

上記のLoadイベントが実行される前にResizeイベントが先に実行されてしまうのです。
少々長くなりすみませんが、再現用のテストコードを掲載させて頂きます。
(新規プロジェクトでフォームとモジュールを追加し、フォームにMainMenuコンポー
 ネントを配置するだけです。コメント行は現状の対応策です。)

Module Module1
'   Public flagInit As Boolean
    Public Sub Main()
        Dim frm As Form1
'       flagInit = True
        frm = New Form1
        System.Windows.Forms.Application.Run(frm) '←(問題点)この行の実行時にLoadイベント
    End Sub                                       '  の前にResizeイベントが実行される。
End Module

Public Class Form1
    Inherits System.Windows.Forms.Form
    Public Sub New()
        MyBase.New()
        InitializeComponent()
    End Sub
    Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
    ' --- (省略)
    End Sub
    Private components As System.ComponentModel.IContainer
    Friend WithEvents MainMenu1 As System.Windows.Forms.MainMenu
    <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
        Me.MainMenu1 = New System.Windows.Forms.MainMenu
        Me.AutoScaleBaseSize = New System.Drawing.Size(5, 12)
        Me.ClientSize = New System.Drawing.Size(292, 273)
        Me.Menu = Me.MainMenu1                            '←ここでもResize発生(参考)
        Me.Name = "Form1"
        Me.Text = "Form1"
    End Sub
    Private Sub Form1_Resize(ByVal sender As Object, _
                             ByVal e As System.EventArgs) Handles MyBase.Resize
'       If flagInit = True Then
'           Exit Sub
'       End If
        Me.Text = Me.Text & "-Resize"
    End Sub
    Private Sub Form1_Load(ByVal sender As Object, _
                           ByVal e As System.EventArgs) Handles MyBase.Load
        Me.Text = Me.Text & "-Load"
        '実際にはここで各コントロールの初期設定等を実施。
'       flagInit = False
    End Sub
End Class

上記のコードで、それぞれのモジュールの先頭にブレークポイントを設定してステップ実行
すると、"System.Windows.Forms.Application.Run(frm)"の実行時にResizeイベントが
実行され、そのあとでLoadイベントが実行されます。
しかし、不思議なことに"Me.Text"の内容は、"Form1-Load"となります。
"Private Sub InitializeComponent()"の"<System.Diagnostics.DebuggerStepThrough()>"
をコメントにしてステップ実行してみて判ったのですが、"Me.Menu = Me.MainMenu1"でも
Resizeイベントが発生しますね。
それで、現状は、上記のコメント行のようにフラグ変数で対応しています。

以上、長くなってすみませんでした。宜しくお願い致します。

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

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