1Public Class Form1
23 Dim msg As String = TextBox1.Text
45 Private Sub ShowMsg(msg As String)
67 MessageBox.Show(msg)
89 End Sub
10111213 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
1415 Call ShowMsg(msg)
1617 End Sub
1819End Class
20
> Dim msg As String = TextBox1.Text
これを次のように書き換えます。
Dim msg As String
変数に最初の値を代入することを初期化と呼びます。質問のコードでは宣言と初期化を同時に行っていますが、これを宣言のみにし、msg の初期化は TextBox1 が初期化されるのを待ってから行うということです。
Public Class Form1
Dim msg As String
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
msg = TextBox1.Text
End Sub
Private Sub ShowMsg(msg As String)
MessageBox.Show(msg)
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Call ShowMsg(msg)
End Sub
End Class
このように記述したのですが、文字列が表示されません。
ご教示頂ければ幸いです。
1' Form1.vb
2Public Class Form1
3 Private Sub ShowMsg(msg As String)
4 MessageBox.Show(msg)
5 End Sub
67 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
8 ' このイベントハンドラーが使えるときには、TextBox1のインスタンスが生成されていて、使える状態になっている。
9 ShowMsg(TextBox1.Text)
10 End Sub
11End Class
プロジェクトをビルドすると、Visual Studio のフォームデザイナーで「Form1.Desginer.vb」と言うソースファイルが出来上がります。Form1と、TextBox1、Button1のインスタンスが生成されていることが分かります。
VB
1<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
2Partial Class Form1
3 Inherits System.Windows.Forms.Form
45 'フォームがコンポーネントの一覧をクリーンアップするために dispose をオーバーライドします。
6 <System.Diagnostics.DebuggerNonUserCode()> _
7 Protected Overrides Sub Dispose(ByVal disposing As Boolean)
8 Try
9 If disposing AndAlso components IsNot Nothing Then
10 components.Dispose()
11 End If
12 Finally
13 MyBase.Dispose(disposing)
14 End Try
15 End Sub
1617 'Windows フォーム デザイナーで必要です。
18 Private components As System.ComponentModel.IContainer
1920 'メモ: 以下のプロシージャは Windows フォーム デザイナーで必要です。
21 'Windows フォーム デザイナーを使用して変更できます。
22 'コード エディターを使って変更しないでください。
23 <System.Diagnostics.DebuggerStepThrough()> _
24 Private Sub InitializeComponent()
25 Me.TextBox1 = New System.Windows.Forms.TextBox()
26 Me.Button1 = New System.Windows.Forms.Button()
27 Me.SuspendLayout()
28 '
29 'TextBox1
30 '
31 Me.TextBox1.Location = New System.Drawing.Point(44, 48)
32 Me.TextBox1.Name = "TextBox1"
33 Me.TextBox1.Size = New System.Drawing.Size(100, 28)
34 Me.TextBox1.TabIndex = 0
35 '
36 'Button1
37 '
38 Me.Button1.Location = New System.Drawing.Point(44, 83)
39 Me.Button1.Name = "Button1"
40 Me.Button1.Size = New System.Drawing.Size(75, 23)
41 Me.Button1.TabIndex = 1
42 Me.Button1.Text = "Button1"
43 Me.Button1.UseVisualStyleBackColor = True
44 '
45 'Form1
46 '
47 Me.AutoScaleDimensions = New System.Drawing.SizeF(11.0!, 21.0!)
48 Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
49 Me.ClientSize = New System.Drawing.Size(800, 450)
50 Me.Controls.Add(Me.Button1)
51 Me.Controls.Add(Me.TextBox1)
52 Me.Name = "Form1"
53 Me.Text = "Form1"
54 Me.ResumeLayout(False)
55 Me.PerformLayout()
5657 End Sub
5859 Friend WithEvents TextBox1 As TextBox
60 Friend WithEvents Button1 As Button
61End Class
62