§4 計算(1)2 | プログラミング実習 |
【4】 入力データの検査
数値1と数値2に入力された数字の文字列が、数値として正しいものであるかを検査する。正しいものでなければ、エラーメッセージを示して、再入力できるようにする。
操作 11 加算の処理を次のように修正する。数値1だけを検査する。
Private Sub TasuButton_Click(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles TasuButton.Click
Dim x1 As Double, x2 As Double
If IsNumeric(Data1.Text) = True Then '数字の文字列の検査
x1 = Val(Data1.Text)
Else
MsgBox("Error")
'メッセージを表示する
Exit Sub 'メソッドを抜ける
End If
x2 = Val(Data2.Text)
Kotae.Text = Str(x1 + x2)
End Sub
IsNumeric関数は数字の文字列を検査する関数である。数値として正しいものであればTrue、正しくなければFalseを返却する。検査をする関数の名前は、Isで始まるものが多い。これは、"Is this OK ?" のIsである。
Exit Sub命令は、ここでメソッドの処理を中断する命令である。
操作 12 プログラムを実行する。数値1と数値2を入力して、[加算]ボタンをクリックする。
数値1に数字以外の文字を入力して、[加算]ボタンをクリックするとエラーメッセージが表示される。
エラーメッセージのダイアログで、[OK]ボタンをクリックして、再度、正しい数字を入力することになる。このとき、カーソルが数値1の入力欄にあるようにすると、再入力がしやすくなる。次に、その処理を追加する。
操作 13 加算の処理に次のように追加する。
エラーメッセージで[OK]ボタンをクリックした後、カーソルが数値1の入力欄にあるようにする。
Private Sub TasuButton_Click(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles TasuButton.Click
Dim x1 As Double, x2 As Double
If IsNumeric(Data1.Text) = True Then
x1 = Val(Data1.Text)
Else
MsgBox("Error")
Data1.Focus() 'カーソルをData1オブジェクトに設定する
Data1.SelectAll() 'すべてのデータを選択状態にする
Exit Sub
End If
x2 = Val(Data2.Text)
Kotae.Text = Str(x1 + x2)
End Sub
Focusメソッドは、オブジェクトにフォーカスを設定する。
フォーカスとは、選択されていて入力可能である状態を表す。(図参照)
SelectAllメソッドは、入力されているデータを選択状態にする。この状態で入力すると上書き入力になるので消す手間が省ける。
操作 14 プログラムを実行する。数値1に数字以外の文字を入力して、[加算]ボタンをクリックする。
エラーメッセージのダイアログで、[OK]ボタンをクリックすると、数値1の入力欄が選択状態になる。
If IsNumeric(Data1.Text) = True Then は、「 = True」を省略して、If IsNumeric(Data1.Text) Then と書くことができる。
If文の書き方は複数考えることができる。次のプログラムは、どちらも同じ働きをする。い
If IsNumeric(Data1.Text) Then
x1 = Val(Data1.Text)
Else
MsgBox("Error")
Data1.Focus()
Data1.SelectAll()
Exit Sub
End IfIf IsNumeric(Data1.Text) = False Then
MsgBox("Error")
Data1.Focus()
Data1.SelectAll()
Exit Sub
Else
x1 = Val(Data1.Text)
End If
操作 15 数値2の入力欄(Data2)についても、数値1の入力欄と同じように数字の検査やデータの選択状態などの処理を追加する(下線部)。
Private Sub TasuButton_Click(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles TasuButton.Click
Dim x1 As Double, x2 As Double
If IsNumeric(Data1.Text) = True Then
x1 = Val(Data1.Text)
Else
MsgBox("Error")
Data1.Focus()
'カーソルをData1オブジェクトに設定する
Data1.SelectAll() 'すべてのデータを選択状態にする
Exit Sub
End If
If IsNumeric(Data2.Text) = True Then
x2 = Val(Data2.Text)
Else
MsgBox("Error")
Data2.Focus()
Data2.SelectAll()
Exit Sub
End If
Kotae.Text = Str(x1 + x2)
End Sub
操作 16 [減算]、[乗算]、[除算]の処理を追加してプログラムを完成せよ。また、プログラム終了確認の処理も追加する。
【5】 メソッドの作成
[加算]、[減算]、[乗算]、[除算]の処理をよく見比べると、最後の計算式「Kotae.Text = Str(x1 + x2)」以外は同じである。同じ処理の部分を別のメソッド(サブルーチン)として作成して重複する処理をひとつにすることでプログラムの量を減らすことができる。
○ [加算]に対応するメソッド
Private Sub TasuButton_Click(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles TasuButton.Click
Dim x1 As Double, x2 As Double
If DataCheck2() = True Then
x1 = Val(Data1.Text)
x2 = Val(Data2.Text)
Kotae.Text = Str(x1 + x2)
End If
End Sub
○ メソッド作成例
Private Function DataCheck2() As Boolean
If IsNumeric(Data1.Text) = False Then
MsgBox("Error")
Data1.Focus()
Data1.SelectAll()
Return False
End If
If IsNumeric(Data2.Text) = False Then
MsgBox("Error")
Data2.Focus()
Data2.SelectAll()
Return False
End If
Return True
End Function
作成したメソッドDataCheck2は、2カ所の入力欄の数字検査とエラー処理を担当する。入力されたデータがOKのときはTrue、エラーのときはFalseを値として返却する。
値を返却するメソッドはSubではなく「Function」として作成する。定義部の意味は次の通りである。(今回、引数はないので空欄である。)
Private Function DataCheck2( 引数 )
メソッド名As Boolean
返却値の型
メソッドの返却値は「Return 値」という形で記述する。
操作 17 DataCheck2メソッドを使ってプログラム全体を修正する。
○ ボタンの表示
ボタンのプロパティに"Image"プロパティがある。これまでボタンには機能を表す文字を表示してきたが、画像で示すこともできる。
+、−、×、÷、4つの画像を用意して、ボタンの表示を画像に変更する。画像は32×32ドットのサイズで作成することにする。
@ ボタンのTextプロパティを削除する。
A ボタンのImageプロパティの ... をクリックして、画像をリソースファイルに登録する。
B ボタンのSizeプロパティを「32,32」に設定する。
C ボタンのAutoSizeプロパティをTrueに設定する。
→ Sizeプロパティが38,38に変わる。このサイズが32×32ドットの画像に必要なサイズである。AutoSizeプロパティをFalseに戻して、Sizeプロパティを38,38に設定しても良い。
§4 計算(1)2 | Copyright©2008 Hiroshi Masuda |