■ ダイアログボックス
フォームの Show メソッドと ShowDialog メソッド
DialogResult プロパティの活用
Visual Basic 6.0 でフォームを表示する場合、Show メソッドを利用していました。そして、引数で vbModeless (モードレスフォーム) または vbModal (モーダルフォーム) を指定しました。
Visual Basic .NET でも Show メソッドを利用してフォームを表示することができます。しかし、この Show メソッドには引数を指定することができません。常にモードレスになります。モーダルフォームを表示したい場合は、ShowDialog メソッドを利用します。
Dim frmSub As New Form2 ()
frmSub.ShowDialog()
もうひとつの変更点は、ユーザーが選んだボタンの検出です。Visual Basic 6.0 では、ユーザーがダイアログ上でクリックしたボタンを、呼び出し側のフォームで検出するために、フォームレベル変数やグローバル変数などを利用するなど、コーディングが必要でした。
Visual Basic .NET では、これが改善され呼び出された側のコードは不要になります。ダイアログ上に配置したボタンコントロールの DialogResult プロパティを、OK や Cancel、Ignore (無視) などに設定します。これで、ボタンとの関連付けが行なわれます。
この設定をしておくと、そのボタンがクリックされたときに、自動的にダイアログが非表示になり、その設定した値を呼び出し元で参照可能になります。上記のコードに続けて次のコーディングをします。
Select Case frmSub.DialogResult
Case DialogResult.OK
' OK のときの処理
Case DialogResult.Cancel
' キャンセルのときの処理
End Select
その後、
frmSub = Nothing
でオブジェクトを破棄します。なお、ボタンとの関連付けは、コーディングでも可能です。
または、ダイアログ側で、
Me.DialogResult = DialogResult.Ignore
としても、同様に動作します。この例では、Ignore を設定したことになります。
アップグレードウィザードによって適切にアップグレードされます。Show メソッドでモーダルを指定した場合は、ShowDialog になります。ただし、このアップグレードされたコードは、
- DialogResult プロパティの機能は利用せずに、ダイアログをコーディングで非表示または、クローズする
- 冗長なコードが多い (オブジェクトの存在を確認しオブジェクトが存在しないと作成)
という欠点を持っています。そのためお勧めできません。
アップグレード後に修正されることをお勧めします。