タイトル | : Re^5: フォームのResizeイベントについて |
記事No | : 3103 |
投稿日 | : 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イベントが発生しますね。 それで、現状は、上記のコメント行のようにフラグ変数で対応しています。
以上、長くなってすみませんでした。宜しくお願い致します。
|