■ ダイアログボックス

  • フォームの 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 プロパティの機能は利用せずに、ダイアログをコーディングで非表示または、クローズする
  • 冗長なコードが多い (オブジェクトの存在を確認しオブジェクトが存在しないと作成)

という欠点を持っています。そのためお勧めできません。

アップグレード後に修正されることをお勧めします。