第4講 If文の学習
第10話 データ交換ソフト
さて、行ごとの交換を考えるために、
新しいプロジェクトから次のようなForm1作り、
キーボードから入力されたデータ1とデータ2を交換するということを考えてみましょう。
実行をダブルクリックして、コーティングを考えます。
一見すると次のコーティングで、うまくいくような気がします。
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
'変数の宣言
Dim a As Integer, b As Integer
'TextBoxからデータの取得
a = TextBox1.Text
b = TextBox2.Text
'データ交換
a = b
b = a
'データ交換後の表示
TextBox3.Text = a
TextBox4.Text = b
End Sub
End Class
ところがビルドして、入力してから実行ボタンを押すと、
でうまくいきません。どうしてでしょうか。
動きをトレースしてみましょう。
まず、
a = TextBox1.Text
b = TextBox2.Text
の2行で、変数aと変数bにデータが収容されます。
次の行のa = b によって、
28がaの箱に入ってきます。
箱には1個のデータしか入りませんから、
12は箱から出ていきます。
そうです。
データは箱の中でしか生きられませんから、
箱から出た瞬間に12は消滅してしまうのです。
尚、28は箱bから出ていくのではなく、
箱bの内容がコピーされ、コピーされた28が箱aに入って行くのです。
図では、その違いを移動とコピーペースト
(俗に言うコピペです。データを記憶装置=メモリーに複写することをコピーといい、
そのメモリーに複写されたデータを該当の場所に貼り付けることをペーストといいます。)
という言葉で比喩的に表しています。
さて、この瞬間に実は、
となってしまっています。
ですから、次の行のb = a は全く意味がありません。
ではどうしたらよいのでしょうか。ヒントはもう一つ箱(変数)を用意することです。
皆さん、正しいコーティングを考えてください。解答例は、30行下。
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
'変数の宣言
Dim a As Integer, b As Integer, w1 As Integer
'TextBoxからデータの取得
a = TextBox1.Text
b = TextBox2.Text
'データ交換
w1 = a
a = b
b = w1
'データ交換後の表示
TextBox3.Text = a
TextBox4.Text = b
End Sub
End Class
実行例
うまくいきました。
トレースしてみましょう。
確かにデータの交換に成功しています。
尚、用意する箱(変数)w1は、
Dim w1 As String
と宣言してください。Stringは文字型です。
DataGridViewには数字も文字も入っているからです。
その両方に対応できるのがString型です。
VC++だと型がいろいろあってちょっとでも違うと柔軟性がなくエラーしますが、
VBの方はかなり柔軟で、今回のように文字と数字が混ざっていても、
うまく自動的にキャスト(変換)して、柔軟に対応してくれます。
考えるための材料はすべてそろいました。
第9話と第10話を熟読の上、
並び替えに挑戦しましょう。
第9話へ 第11話へ