こんなコードを書いてみる。
で、デザイナで、TextBox1のTextプロパティに適当な値を、Form1は初期サイズ(300×300)からちょっとサイズを変更(例:300×212)にして、その上で最大化するように設定しておく。
Public Class Form1 Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load Debug.Print("Form1_Load") End Sub Private Sub Form1_Resize(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Resize Debug.Print("Form1_Resize") End Sub Private Sub TextBox1_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged Debug.Print("TextBox1_TextChanged") End Sub End Class
実行すると結果はこう。
TextBox1_TextChanged Form1_Resize{Width=300, Height=212} Form1_Resize{Width=1296, Height=1008} Form1_Load
注意点としては、以下
- フォームロードよりも先に、コントロールのイベントややResizeイベントが発生する。
- リサイズイベントが二回発生する。
- 実は、ウインドウが最大化でなく普通で、サイズもデザイナのデフォルトな300×300だと、Form_Resizeイベントは発生しない。
ソースコードをみると、まあ当然ですよね、といった感じ。
_ Private Sub InitializeComponent() Me.TextBox1 = New System.Windows.Forms.TextBox Me.SuspendLayout() ' 'TextBox1 ' Me.TextBox1.Location = New System.Drawing.Point(36, 21) Me.TextBox1.Name = "TextBox1" Me.TextBox1.Size = New System.Drawing.Size(191, 19) Me.TextBox1.TabIndex = 0 Me.TextBox1.Text = "test" ' TextBox1_TextChanged ' 'Form1 ' Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 12.0!) Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font Me.ClientSize = New System.Drawing.Size(284, 175) ' Form1_Resize{Width=300, Height=212} Me.Controls.Add(Me.TextBox1) Me.Name = "Form1" Me.Text = "Form1" Me.WindowState = System.Windows.Forms.FormWindowState.Maximize ' Form1_Resize{Width=1296, Height=1008} Me.ResumeLayout(False) Me.PerformLayout() End Sub
つい、最初にくるイベントがForm_Loadだと思いがちなのでメモ。