Visual Basic 6.0 から Visual Basic .NET への移行

目次

  • はじめに

  • 言語

    バリアント型 整数型 (Integer) および長整数型 (Long) 通貨型 (Currency)
    日付型 (Date) 固定長文字列 Type
    ユーザー定義型記憶領域 Empty Null 値および Null 値の透過
    Def<Type> ブロック内のローカル変数 インスタンス自動再作成
    オブジェクトの完成 配列 ReDim
    代入式 プロシージャの呼び出し 静的 (Static) プロシージャ
    パラメータ ByVal/ByRef の既定値 IsMissing および省略可能なパラメータ ParamArray パラメータ
    Declare の As Any パラメータ Implements プロパティ
    既定のプロパティ 列挙 While
    On...GoTo および On...GoSub GoSub...Return LSet
    VarPtr、StrPtr、および ObjPtr File I/O Debug.Print
    リソース ファイル    
  • Windows アプリケーション

    Visual Basic のフォーム PrintForm メソッド Circle、Cls、PSet、Line、および Point メソッド
    Caption プロパティ ScaleMode プロパティ フォント
    Screen.MousePointer プロパティ Timer.Interval プロパティ コントロール配列
    Menu コントロール OLE Container コントロール Image コントロール
    Line および Shape コントロール ウィンドウレス コントロール Clipboard
    Dynamic Data Exchange    
  • Web アプリケーション

    WebClasses
    ActiveX ドキュメントおよび DHTML アプリケーション
    Circle、Cls、PSet、Line、および Point メソッド
  • データ

    ADO、RDO、および DAO コード
    ADO、RDO、および DAO のデータ バインド
  • IDE

    [イミディエイト] ウィンドウ
    ADO、RDO、および DAO のデータ バインド
    IDE および Project の拡張性

はじめに

Microsoft® Visual Basic® の次バージョンである Microsoft Visual Basic .NET は、.NET Framework をベースに基礎から設計し直されており、Microsoft Windows® オペレーティング システムおよび Web 向けの次世代アプリケーションを容易に構築することができます。Visual Basic .NET を使用すると、Web アプリケーション、Web サービス、Windows アプリケーション、およびサーバーサイド コンポーネントを簡単かつ視覚的に開発できます。また、XCOPY コマンドにより Windows アプリケーションが配置されるため、DLL ファイルのバージョンについて心配する必要はありません。 つまり、Visual Basic .NET では "DLL Hell" は過去の問題となってしまいました。

Visual Basic .NET の設計にあたり、世界中の Visual Basic 開発者からの強い要望が考慮に入れられました。現在、Visual Basic は真のオブジェクト指向言語となっており、実装の継承をサポートします。Form Designer は、表示スタイルの継承をサポートしており、フォームの自動サイズ調整、リソース ローカライゼーション、およびユーザー補助などの新機能も組み込まれています。このデータ ツールでは本質的に XML データがサポートされており、デザイン時のデータ バインディングにより独立したデータが処理されます。さらに、Visual Basic .NET は .NET Framework 上に直接構築されるため、あらゆるプラットフォーム機能へのアクセスが可能となるだけでなく、ほかの .NET 言語との相互運用性も確保することができます。

これらの機能を実装するために、製品にはさまざまな変更が加えられました。この記事では、Visual Basic 6.0 から Visual Basic .NET への移行に伴う主な変更と、その変更の目的について説明します。また、既存のアプリケーションを Visual Basic .NET にアップグレードするために製品に組み込まれたツール、Visual Basic .NET アップグレード ウィザードの機能も紹介します。

Visual Basic 6.0 から Visual Basic .NET へのアップグレードの詳細については、ホワイト ペーパー「Visual Basic .NET へのアップグレードを円滑に行うための Visual Basic 6.0 アプリケーションの準備」も参照してください。このホワイト ペーパーでは、アップグレードのプロセスと、アップグレードを円滑に進めるのに役立つ推奨事項を紹介します。


言語

バリアント型

Visual Basic 6.0 バリアント型とは特殊な "共通" データ型で、固定長文字列を除くすべてのデータを含めることができます。オブジェクト型 (Object) 変数は、オブジェクトのポインタとして使用します。既定のデータ型はバリアント型です。
Visual Basic .NET コモン ランゲージ ランタイム (CLR) では、共通データ型に対してオブジェクト型を使用します。Visual Basic .NET で共通データ型としてバリアント型を使用することを継続することもできましたが、異種言語での開発による混乱を避けるために、あえて CLR の名前付け規則を採用しました。共通データ型を 1 つだけ採用することで、システムの簡素化を実現することができました。既定のデータ型はオブジェクト型です。
アップグレード ウィザード

バリアント型はオブジェクト型に変更されました。したがって、

im x As Variant

は、以下のようになります。

Dim x As Object

整数型 (Integer) および長整数型 (Long)

Visual Basic 6.0 長整数型変数は 32 ビット符号付き数値、整数型変数は 16 ビットの数値として格納されます。
Visual Basic .NET

長整数型変数は 64 ビット符号付数値、整数型の変数は 32 ビットの数値、短整数型 (Short) 変数は 16 ビットの数値として格納されます。32 ビット システムでは、16 ビットまたは 64 ビットの整数演算より、32 ビット整数演算の方が高速に処理されます。つまり、整数型が最も効率的で重要な数値型です。

.NET Framework テクノロジの一部は、近年の 32 ビット テクノロジおよび 64 ビット テクノロジに基づいているため、データの更新は新しいテクノロジに適合するためであることが分かります。

アップグレード ウィザード

変数の型が変更されています。したがって、

Dim y As Integer
Dim y As Long

は、以下のようになります。

Dim x As Short
Dim y As Integer

通貨型 (Currency)

Visual Basic 6.0

Visual Basic 6.0 では、通貨型をサポートしています。変数に 10 進型 (Decimal) のサフィックスが設定されていても、10 進型を変数に宣言することはできません。

通貨型変数は、64 ビットの整数として格納されます。数値は、整数部 15 桁、小数部 4 桁で小数点が固定されており、10,000 ずつ増減します。表示範囲は、-922,337,203,685,477.5808 ~ 922,337,203,685,477.5807 です。

10 進型変数は、10 の n 乗に拡張された 96 ビット符号付き整数として格納されます。10 に累乗する値によって、小数部の桁数を 0 ~ 28 の範囲で指定します。値が 0 の場合 (小数点以下の桁数なし)、最大値は +/-79,228,162,514,264,337,593,543,950,335 です。小数点以下が 28 桁の場合、最大値は +/-7.9228162514264337593543950335、0 でない最小値は +/-0.0000000000000000000000000001 です。

Visual Basic .NET 通貨型では、切り上げに関するエラーを回避できるほどの精度が提供されません。そのため、固有のデータ型として 10 進型が作成されました。
アップグレード ウィザード

通貨型は 10 進型に変更されました。したがって、

Dim x As Currency

は、以下のようになります。

Dim x As Decimal

日付型 (Date)

Visual Basic 6.0

日付型変数は、倍精度浮動小数点数型 (Double) 形式で内部的に格納され、倍精度浮動小数点数型として処理されます。

日付型変数は、IEEE 64 ビットの浮動小数点数として格納され、100 年 1 月 1 日から 9999 年 12 月 31 日 (日付)、 および 0:00:00 ~ 23:59:59 (時刻) の範囲で表現されます。認識可能な日付の定数値はすべて、日付型変数に代入することができます。

その他の数値型が日付型に変換される場合、整数部が日付、小数部が時刻を表します。午前 0 時は 0、正午は 0.5 です。1899 年 12 月 30 日より前の日付はすべて、負の数値で表現されます。

Visual Basic .NET 日付型変数は、64 ビットの整数として内部的に格納されるため、倍精度浮動小数点数型変数として直接処理することはできません。.NETFramework では、ToOADate 関数および FromOADate 関数を使用して、倍精度浮動小数点数型と日付型の変換を行います。日付を整数で表すことで、日付処理の簡素化および高速化につながります。
アップグレード ウィザード

アップグレード ツールを使用しても、バリアント型を使用して日付型を倍精度浮動小数点数型として格納しているケースをすべて検出できるわけではありませんが、一般に、倍精度浮動小数点数型が日付型に割り当てられている場合、その場合に応じて ToOADate または FromOADate メソッドが挿入されます。たとえば、

Dim dbl As Double
Dim dat As Date
  Dbl = dat

は、以下のようになります。

Dim dbl As Double
Dim dat As Date

Dbl = dat.ToOADate

固定長文字列

Visual Basic 6.0 クラス モジュールのパブリック (Public) 変数以外の変数を、固定長文字列として宣言することができます。
Visual Basic .NET CLR の最初のバージョンでは、固定長文字列はサポートされていません。将来のバージョンでサポートされる予定です。
アップグレード ウィザード

通常、処理は不要です。固定長文字列を動作させると、

Dim MyFixedLengthString As String * 100

は、以下のようになります。

Dim MyFixedLengthString As New VB6.FixedLengthString(100)

このトピックの詳細については、ホワイト ペーパー「Visual Basic .NET へのアップグレードを円滑に行うための Visual Basic 6.0 アプリケーションの準備」を参照してください。

Type

Visual Basic 6.0 Type ステートメントは、ユーザー定義型を定義する場合に使用します。
Visual Basic .NET

ユーザーはクラス、列挙、およびインターフェイスを定義することもできるため、User-Defined Type(ユーザ定義型)は混同されがちです。User-Defined Type は QuickBasic の遺物で、ユーザーが定義できる種類は構造体およびレコードのみです。CLR では、あらゆるデータ型を対象に広い意味でタイプという言葉を使用します。

このため、Visual Basic .NET では、Type ステートメントは Structure に変更されました。

アップグレード ウィザード

Type ステートメントが構造に変更されたため、

Type MyType
MyVariable As Integer
End Type

は、以下のようになります。

Structure MyType
Dim MyVariable As Short
End Structures

ユーザー定義型の記憶領域

Visual Basic 6.0 ユーザー定義のデータ型には、データ型、配列、または定義済みのユーザー定義型の要素を 1 つまたは複数含めることができます。Visual Basic 6.0 では、メモリの連続したブロックに記憶されます。
Visual Basic .NET

フォーマットが最も有効です。メモリの連続したブロックである場合とそうでない場合があります。マーシャリングした属性を構造体に設定し、メモリの連続したブロックとして COM コンポーネントに確実に渡すことができます。

 

アップグレード ウィザード API にマーシャリングした属性を追加する必要がある場合、常に TODO コメントが設定されます。属性は自動的に追加されませんが、構造体を API に渡さない場合は不要です。

Empty

Visual Basic 6.0 バリアント型は Empty に初期化され、数式で使用される場合は 0 に、文字列式で使用される場合は空の文字列に自動変換されます。
Visual Basic .NET オブジェクト変数は Nothing に初期化され、数式で使用される場合は 0 に、文字列式で使用される場合は空の文字列に自動変換されます。空の代わりに Nothing を使用することで、言語の複雑性が軽減され、相互運用性が向上されます。
アップグレード ウィザード Empty は Nothing に変換されます。

Null 値および Null 値の透過

Visual Basic 6.0 Null 値はバリアント型のサブタイプで、有効なデータが含まれていない変数を示します。Null 値は、式または関数により "伝播" します。式の一部が Null と評価された場合、その式全体が Null と評価されることになります。大部分の関数では、引数として Null を渡すと、その関数が Null を返します。
Visual Basic .NET

Null 値の透過はサポートされていません。ADO.NET を使用したプログラミング データのモデルでは、値が抽出される前に Null のフィールドがテストされます。Null 値を含むバリアント型データは、オブジェクト タイプ DBNull として CLR にマーシャリングされます。

Visual Basic .NET では、従来より Null 値を直感的に使用することができます。たとえば、Left() などの文字列関数は常に空の文字列を返します。

アップグレード ウィザード

Null 値および IsNull 関数には、アップグレードの警告が設定されます。たとえば、

If x Is Null Then MsgBox "Null"

は、以下のようになります。

' UPGRADE_WARNING: IsNull() が使用されています。
If IsDBNull(x) Then MsgBox "Null"

Def<Type>

Visual Basic 6.0 DefBool、DefByte、DefInt、DefLng、DefCur、DefSng、DefDbl、DefDec、DefDate、DefStr、DefObj、および DefVar ステートメントは、モジュール レベルで使用され、名前が指定した文字で始まる変数、パラメータ、およびプロシージャの戻り値型の既定データの型を設定します。
Visual Basic .NET 明示的な型の宣言を回避することで、コードの読みやすさおよび保全性を向上しました。
アップグレード ウィザード

変数の型の明示的な宣言がコードに挿入されます。たとえば、

DefStr a-z
Sub MySub
s = "Hello"
End Sub

は、以下のようになります。

Sub MySub
Dim s As String
s = "Hello"
End Sub

ブロック内のローカル変数

Visual Basic 6.0 ローカル変数の宣言が含まれている行からプロシージャ末尾まで、ローカル変数を参照することができます。
Visual Basic .NET

Visual Basic .NET では、変数のブロック スコーピングをサポートしています。したがって、ローカル変数を参照することができるのは、宣言が含まれる行から宣言が明示されるブロックの末尾までです。たとえば、

Sub Test(x As Integer)
  If x < 0 Then
  Dim y As Integer = - x
  '...
  Else
  '...
  End If
End Sub

上記の例の変数は、宣言されているブロック内でのみ使用可能です。使用できるのは特に、Else ステートメントまでの宣言です。変数をプロシージャ全体で使用可能にするには、If/Else/End If 制御構造の外部で宣言する必要があります。

変数のブロック スコーピングは、多くの構造化言語に共通する機能です。プロシージャ ローカルではプロシージャに対してプライベートな変数の定義を可能にすることで構造化プログラミングをサポートするように、ブロックレベルの変数ではコード ブロックに対してプライベートな変数の定義を可能にすることで構造化分解をサポートします。

アップグレード ウィザード

変数がブロック内で宣言されている場合、モジュール レベルのスコープに自動的に移動されます。たとえば、

If x =1 Then
  Dim y As Integer
End If

は、以下のようになります。

Dim y As Integer
If x =1 Then
End If

インスタンス自動再作成

Visual Basic 6.0

フォームのクラス変数宣言 Dim x As New <クラス名> を使用すると、コンパイラが x へのすべての参照についてコードを生成することになります。このコードにより x が Nothing であるかどうかが確認されます。Nothing であれば、クラスのインスタンスが新規作成されます。たとえば、

Dim x As New MyClass
'...
Call x.MyMethod()

は、次のコードと同等です。

Dim x As MyClass
'...
If x Is Nothing Then
  Set x = New MyClass
End If
Call x.MyMethod()

変数が Nothing に設定された後も、次の呼び出し時にインスタンスが再作成されます。

Visual Basic .NET

フォームの変数宣言 Dim x As New <クラス名> は、Dim x As <クラス名> = New <クラス名> と評価されます。この構文で宣言される変数の参照には、コードは特に生成されません。

Visual Basic .NET での As New の宣言は、Visual Basic 6.0 の同じ宣言と比較すると効率が大幅に改善されています。 このような変数の参照では、大部分はオーバーヘッドを追加する必要がありません。Visual Basic 6.0 では、"自動インスタンス再作成" 機能が、予期せぬ動作を始めることがあります。

アップグレード ウィザード

ほとんど問題ありません。ただし、Nothing に設定されたコードでクラスを使用しようとすると、実行時に例外が検出されやすくなります。このようなコードは、次の例のように修正することで、新しいバージョンのクラスを容易にインスタンス化することができます。

Dim x As New MyClass
x = Nothing
x = New MyClass

オブジェクトの完成

Visual Basic 6.0 COM 参照カウント メカニズムを使用して、オブジェクト インスタンスのガーベッジ コレクションを行います。オブジェクトがサイクルに組み込まれていない状態になると、オブジェクトがそれ以上使用されず、終了コードを実行するときに参照カウントがすぐに検出します。
Visual Basic .NET

トレース ガーベッジ コレクタにより、スタック変数、モジュール変数、および共有変数に格納されたアクセス可能な参照から順に、オブジェクトが処理されます。トレーシング プロセスのタスクはバックグラウンドで実行されるため、オブジェクトに対する最後の参照を処理してから新しい参照が追加されまで、時間がかかることがあります。

場合によっては、クライアント側でオブジェクトのリソースを強制的に解放する機能が必要です。CLR では、このようなオブジェクトで IDisposable インターフェイスを実装するという規則を使用します。これにより、Dispose メソッドが確立されます。Dispose メソッドによるオブジェクトの使用をクライアントで完了すると、そのオブジェクトのリソースを解放するために Dispose メソッドを明示的に呼び出すことができます。たとえば、データベースをラップするオブジェクトは、Dispose メソッドを公開する必要があります。

トレーシング ガーベッジ コレクタは、参照サイクルにおいて正確にオブジェクトを解放することができます。また、そのパフォーマンスは、参照カウントのパフォーマンスに比べてはるかに高速です。

アップグレード ウィザード ほとんどの場合、この変更が問題になることはありません。リソース ハンドルを保持するコードを開いた場合 (接続またはファイル ハンドル)、そのハンドルを明示的に閉じる必要があります。問題があった場合は容易に検出され、ランタイム エラーを引き起こします。

配列

Visual Basic 6.0 整数の上限または下限を使用して配列を定義することができます。範囲が宣言で指定されていない場合、Option Base ステートメントを使用して下限が決定されます。
Visual Basic .NET 他言語との相互運用性を有効にするには、すべての配列において下限を 0 に設定する必要があります。 これにより、Option Base ステートメントが不要になります。
アップグレード ウィザード

アップグレードの際、以下のサンプルのように配列の下限は 0 に設定されます。

Dim a(1 to 10) as String

は以下のようになります。

' UPGRADE_WARNING: 配列の下限を 1 から 0 に変更しました
Dim a(10) As String

Dim,ReDim,LBound ステートメントは確認を容易にするために、アップグレードの警告が設定されます。

ReDim

Visual Basic 6.0 Visual Basic 6.0 では、固定サイズの配列と可変サイズの配列が区別されます。固定サイズの配列は Dim ステートメントを使用して宣言されます。このステートメントでは、宣言内に配列の境界が含まれます。動的な配列は、境界の情報を指定しないことで Dim ステートメントで宣言されます。動的な配列を使用できるようにするには、ReDim ステートメントを使用して配列を再設定する必要があります。Visual Basic 6.0 では、ReDim ステートメントを使用すると、単一のステートメント内の動的な配列の宣言および領域の代入を簡単に行うことができます。Visual Basic 6.0 では、変数の宣言および初期化の両方に使用できるのは、ReDim ステートメントのみです。
Visual Basic .NET

ReDim ステートメントは、配列の再割り当て向けではなく、配列用の領域の割り当ておよび再割り当て向けのみに使用されます。これは、Visual Basic .NET では配列がすべて動的であるためです。したがって Visual Basic .NET では、Dim ステートメントを動的な配列の宣言と初期化の両用に使用することができます。

変数宣言では、変数の初期値の宣言と指定の両方を行えるため、ReDim を使用して変数の宣言と初期化の両方を行う必要はありません。不要なだけでなく、冗長性の原因にもなります。Dim ステートメントを使用して変数を宣言するだけで、言語を簡素化し、整合性を保持することができます。

アップグレード ウィザード ReDim() を使用して配列を宣言すると、該当する宣言が自動的にコードに挿入されます。ただし、ReDim を使用して配列を宣言すると、正しい宣言の推断がアップグレード ツールに依存するため、Dim ステートメントを配列に手動で挿入することをお勧めします。また、ReDim を使用すると、2 つの場所で同一の配列が宣言されるため、使いにくいコードが生成されます。

代入式

Visual Basic 6.0 代入式には、 Let (既定) と Set の 2 種類があります。Set ステートメントには共通名 (cn) を使用します。
Visual Basic .NET 代入式には、1 つの種類しかありません。x = y は、以下の変数値またはプロパティ値をy 変数またはプロパティ x に代入することを意味します。オブジェクト インスタンスへの参照がオブジェクト型変数の値となります。したがって、x および y が参照型変数である場合、参照の代入が実行されます。代入式の形式を単一化することで、言語の複雑性が軽減し、コードがさらに読みやすくなります。
アップグレード ウィザード

Set および Let ステートメントが削除されます。型が明確に決められているオブジェクトに対する既定のプロパティが解決され、コードに明示的に追加されます。

このトピックの詳細については、ホワイト ペーパー「Preparing Your Visual Basic 6.0 Applications for the Upgrade to Visual Basic .NET」(英語) を参照してください。

プロシージャの呼び出し

Visual Basic 6.0

プロシージャ コールのフォームが 2 種類サポートされています。Call ステートメントを使用する方法と、Call ステートメントをしない方法です。前者の場合は引数リストをかっこで囲む必要があり、後者の場合は使用しない引数リストをかっこで囲む必要があります。

Visual Basic 6.0 では一般的に、呼び出しキーワードを使用せずにプロシージャを呼び出します。ただし、引数リストをかっこで囲みます。複数のパラメータが存在する場合、コンパイラでは構文エラーとして検出されます。ただし、パラメータが単一のみである場合は、その単一の引数を囲むかっこ内の変数が ByRef としてではなく ByVal として渡されます。これが原因で、追跡が難しい面倒なバグが発生することがあります。

Visual Basic .NET どのような場合でも、引数リストをかっこで囲む必要があります。
アップグレード ウィザード かっこがないプロシージャ コールにかっこが挿入されます。

静的 (Static) プロシージャ

Visual Basic 6.0 プロシージャに対して Static キーワードを宣言することができます。この場合、プロシージャのローカル変数がコール間に保存されることを示します。
Visual Basic .NET

プロシージャでは Static キーワードはサポートされていません。また、静的ローカル変数はすべて Static ステートメントを使用して明示的に宣言する必要があります。

プロシージャ内の変数がすべて静的である必要はほとんどありません。ローカル変数は、Static として明示的に宣言しない限り、常にスタックが割り当てられるため、この機能を削除することで言語が簡素化されると同時に読みやすさが改善されます。

アップグレード ウィザード

プロシージャに Static が設定されている場合、すべてのローカル変数宣言は Static に変更されます。

Static Sub Mysub()
  Dim x As Integer
  Dim y As Integer
End Sub

は、以下のようになります。

Sub Mysub()
  Static x As Integer
  Static y As Integer
End Sub

パラメータ ByVal/ByRef の既定値

Visual Basic 6.0 ByVal または ByRef のどちらも指定しないパラメータは、既定で ByRef に設定されます。
Visual Basic .NET

ByVal または ByRef のどちらも指定しないパラメータは、既定で ByVal に設定されます。

ByRef ではなく ByVal を既定値にすることで、プロシージャにおいて呼び出し側により渡される変数が誤って変更される問題を回避することができます。また、既定の呼び出し規則が割り当てと整合性を保持するため、正規のパラメータに対して式を代入することで、渡された式に対しパラメータが効率的にバインドされます。

Visual Basic 6.0 から Visual Basic .NET への移行に伴う混乱を避けるために、ユーザーが明示的に ByVal または ByRef を指定しなくても、IDE によりあらゆるパラメータの宣言に ByVal キーワードが自動的に追加されます。

アップグレード ウィザード ByRef は、ByVal または ByRef 修飾子のどちらも持たないパラメータに追加されます。

IsMissing および省略可能なパラメータ

Visual Basic 6.0 既定値が設定されていない、省略可能なバリアント型のパラメータは、IsMissing 関数を使用して検出できる特殊なエラー コードに初期化されます。
Visual Basic .NET Visual Basic .NET では、すべての省略可能なパラメータに対して既定値を指定する必要があります。これにより、言語の特殊な値が減少し、言語自体が簡素化されます。
アップグレード ウィザード IsMissing 関数が IsNothing 関数に置き換えられ、アップグレードの警告が設定されます。

ParamArray パラメータ

Visual Basic 6.0 変数が ParamArray 引数に渡された場合、呼び出された関数によりその変数を変更することはできません。ByVal ParamArray 要素はサポートされていません。
Visual Basic .NET

変数が ParamArray 引数に渡されると、呼び出された関数によりその変数を変更することができます。ByRef ParamArray 要素はサポートされていません。

ParamArray 引数については、渡される変数を変更しない使用法が一般的です。ByRef ParamArray 引数をサポートしないことで、ParamArray 引数が通常の配列となり、ParamArray の呼び出し規則が簡素化されます。これにより、ParamArray 引数をあらゆる要素タイプに拡張できるようになるほか、ParamArray 引数を予測する関数を引数以外の配列で直接呼び出すことができます。

アップグレード ウィザード

プロシージャ ParamArray 引数にはアップグレードの警告が設定されます。たとえば、

Function MyFunction(ParamArray p() As Variant)
'...
End Function

は、以下のようになります。

' UPGRADE_WARNING: ParamArray p は、ByRef から ByVal に変更されました。
Function MyFunction(ByVal ParamArray p() As Object)
'...
End Function

Declare の As Any パラメータ

Visual Basic 6.0 ネイティブ API のパラメータを宣言することができます。As Any では、ネイティブ API に対する呼び出しをどのデータ型にも渡すことができます。これは、複数のデータ型をサポートするパラメータの API を呼び出せるようにサポートされていました。
Visual Basic .NET

ネイティブ API を複数のデータ型で呼び出せるオーバーロードの Daclare ステートメントを定義することができます。たとえば、次の Daclare ステートメントを参照してください。

Private Declare Function GetPrivateProfileString _
  Lib "kernel32" Alias "GetPrivateProfileStringA" ( _
  ByVal lpApplicationName As String, _
  ByVal lpKeyName As Any, _
  ByVal lpDefault As String, _
  ByVal lpReturnedString As String, _
  ByVal nSize As Long, _
  ByVal lpFileName As String) As Long

上記のステートメントは、2 つのバージョンの Declare に置き換えることができます。一方は a、もう一方は文字列を受け取ります。

Overloads Private Declare Function GetPrivateProfileStringKey _
  Lib "kernel32" Alias "GetPrivateProfileStringA" ( _
  ByVal lpApplicationName As String, _
  ByVal lpKeyName As String, _
  ByVal lpDefault As String, _
  ByVal lpReturnedString As String, _
  ByVal nSize As Long, _
  ByVal lpFileName As String) As Long
Overloads Private Declare Function GetPrivateProfileStringKey _
  Lib "kernel32" Alias"GetPrivateProfileStringA" ( _
  ByVal lpApplicationName As String, _
  ByVal lpKeyName As Long, _
  ByVal lpDefault As String, _
  ByVal lpReturnedString As String, _
  ByVal nSize As Long, _
  ByVal lpFileName As String) As Long

これにより型の安全性は向上し、プログラム エラーを引き起こすバグの発生は少なくなります。エラーが発生するのは、コンパイラでは、受け取りが明示的に定義されている以外のデータ型で API を呼び出せないためです。

アップグレード ウィザード As Any パラメータを使用した Daclare ステートメントには、アップグレードの警告が設定されます。

Implements

Visual Basic 6.0

Implements ステートメントでは、表示されるクラス モジュールで実装されるインターフェイスまたはクラスを指定します。

 

Visual Basic .NET

Visual Basic .NET の Implements は、Visual Basic 6.0 と大きく異なる点が 2 つあります。

  • クラスを Implements ステートメントで指定することができません。
  • メソッドを実装する場合は常に、そのメソッドを宣言するステートメントの末尾に Implements 句が必要です。これにより、実装されるインターフェイス メソッドが指定されます。

各メソッドに、インターフェイスでメソッドを実装する Implements 句を使用することで、より読みやすくなります。コードを読み取るときに、インターフェイス メソッドの実装にそのメソッドが使用されることは明らかです。

アップグレード ウィザード

クラス a がクラス b を実装する場合、インターフェイスはクラス b に宣言され、クラス a は、クラス b のインターフェイスを実装するために変更されます。

Interface _b
  Function MyFunction() As String
End Interface
Class a
  Implements _b
  Function b_MyFunction() As String
    Implements _b.MyFunction
  End Function
End Class

プロパティ

Visual Basic 6.0 Visual Basic 6.0 では、特定のプロパティに対する Get、Let、および Set プロパティ関数をそれぞれ異なるアクセス レベルで宣言することができます。たとえば、Property Get 関数を Public として宣言し、Property Let を Friend として宣言することができます。
Visual Basic .NET プロパティの Get および Set 関数には同じアクセス レベルを設定しなければなりません。これにより、ほかの .NET 言語との相互運用性が確保されます。
アップグレード ウィザード アクセス レベルが異なる場合、新しいプロパティは Public となります。

既定のプロパティ

Visual Basic 6.0 どのメンバも、クラスの既定として設定することができます。
Visual Basic .NET

パラメータを受け取るプロパティのみ、既定として設定することができます。パラメータを受け取るプロパティは、一般に、コレクションに索引が作成されます。

これにより、メンバのないオブジェクト型変数では、一定のコンテキストのオブジェクトやほかのコンテキストのプロパティの既定値を参照するのではなく、常にオブジェクト自体を参照するため、コードが読みやすくなります。たとえば、Call Display(TextBox1) ステートメントは、テキスト ボックスのインスタンスを Display 関数に渡します。またはテキスト ボックスのプロパティの既定値を渡す可能性もあります。

また、この両義性を除去することで、別々のステートメントで参照の割り当てを実行する必要がなくなります。割り当て x = y は、常に変数 y の内容を変数 x に代入することを意味します。y が参照するオブジェクトの既定のプロパティを x が参照する既定のプロパティに代入するのではありません。

アップグレード ウィザード 既定のプロパティはできる限り解決されます。解決できない場合には、実行時バインディング オブジェクトにエラー コメントが追加されます。

列挙

Visual Basic 6.0 列挙定数は無条件で参照することができます。
Visual Basic .NET

ファイルまたはプロジェクト レベルで列挙の Import が追加された場合、列挙定数は無条件で参照することができます。

これにより、クラス、構造、およびインターフェイスで整合性が保持され、ほかのメンバとの競合を気にすることなくこれらのメンバに一般的な名前を付けることができます。たとえば、Color 列挙および Fruit 列挙のどちらにも、Orange という定数を含めることができます。Visual Basic 6.0 では、MsColorOrange や MsFruitOrange などのように、列挙定数の先頭に語句を付けて一意とする規則が採用されています。

アップグレード ウィザード 列挙を参照する方法は変更され、十分に条件が満たされています。

While

Visual Basic 6.0 While ステートメントは、WEnd ステートメントで終わります。
Visual Basic .NET ブロック構造との整合性を保持するために、ステートメントの終了に使用されていた While は End While に変更されました。これにより、言語の整合性が保たれ、さらに読みやすくなります。
アップグレード ウィザード WEnd ステートメントが End While ステートメントに変更されます。

On...GoTo および On...GoSub

Visual Basic 6.0 On<式> GoTo<デスティネーション リスト> および On <式> GoSub <デスティネーション リスト> ステートメントは、式の値に応じて、デスティネーション リストで指定された行のいずれかに分岐します。
Visual Basic .NET

On...GoTo および On...GoSub は、構造化プログラミングの機能を持っていません。そのため、使用すると、プログラムが読みづらく理解しにくいものになります。複数の分岐を実行するには、構造化および柔軟性に優れた Select Case を使用します。

注 : On Error GoTo は現在もサポートされています。

アップグレード ウィザード

たとえば、

On MyVariable GoTo 100,200,300

には、次のようなアップグレード エラーのコメントが追加されます。

' UPGRADE_ISSUE On MyVariable GoTo はアップグレードされませんでした。
On MyVariable GoTo 100,200,300

このようなステートメントを使用しないために、コードを次のように書き換える必要があります。たとえば、

On x Goto 100,200,300

は、以下のように書き換えることができます。

Select Case x
  Case 1: ' 100 行めのコードを挿入します。
  Case 2: ' 200 行めのコードを挿入します。
  Case 3: ' 300 行めのコードを挿入します。
End Select

GoSub...Return

Visual Basic 6.0 GoSubline ... Return ステートメントはプロシージャ内で分岐し、サブルーチンから戻ります。
Visual Basic .NET GoSub...Return は、構造化プログラミングの機能を持っていません。そのため、使用すると、プログラムが読みづらく理解しにくいものになります。呼び出し可能なプロシージャを分けて作成すると構造化が向上します。
アップグレード ウィザード On...GoTo と同様、これらのステートメントにはアップグレード エラーのコメントが追加されます。

LSet

Visual Basic 6.0 LSet は文字列に空白を補充して指定した長さにするか、またはユーザー定義型の変数を別のユーザー定義型変数にコピーします。
Visual Basic .NET LSet ステートメントはサポートされていません。LSet は安全でないため、実行時にエラーになります。また、実行するには完全に信頼できることが必要です。LSet ステートメントを削除したことで、Type ステートメントによる構造体を実行しづらくなりました。ただし、RtlCopyMemory を使用して Visual Basic .NET のコードを変更すれば、同じ処理を行うことができます。
アップグレード ウィザード

ステートメント

LSet a1 = a2

には、次のようなアップグレード エラーのコメントが追加されます。

' UPGRADE_ISSUE: LSet は、Type間でユーザー定義型を割り当てることはできません。
LSet a1 = a2

VarPtr、StrPtr、および ObjPtr

Visual Basic 6.0 VarPtr、StrPtr、および ObjPtr で整数などの変数のアドレスを返し、RtlCopyMemory などのようなアドレスを操作する API 関数に渡すことができます。VarPtr は変数のアドレス、StrPtr は文字列のアドレス、ObjPtr はオブジェクトのアドレスを返します。これらの関数はマニュアルの中で明文化されていません。
Visual Basic .NET

変数のアドレスが抽出可能ですが、CLR への呼び出しを介して行う必要があります。これは、CLR ではメモリ内で自由に変数を移動できるためです。したがって、アドレスが使用されているにもかかわらず項目を移動しない場合、知らせる必要があります。次に、オブジェクトのアドレスを抽出する例を示します。

Dim MyGCHandle As GCHandle = GCHandle.Alloc(o,GCHandleType.Pinned)
Dim Address As Integer = CInt(MyGCHandle.AddrOfPinnedObject())
'...
MyGCHandle.Free() ' オブジェクト インスタンスの再移動を許可します。

実行時によりデータ項目を移動可能にすることで、実行時のパフォーマンスが向上します。

アップグレード ウィザード

これらのステートメントに対して自動アップグレードは行われないため、"(ステートメント) はサポートされていません" という内容のアップグレード エラーのコメントが付きます。たとえば、

a = VarPtr(b)

は、以下のようになります。

' UPGRADE_ISSUE: 関数 VarPtr() はサポートされていません。
a = VarPtr(b)

このステートメントはコンパイル エラーの原因にもなります。

File I/O

Visual Basic 6.0 File I/O ステートメントは言語に組み込まれています。
Visual Basic .NET クラス ライブラリを使用して、File I/O 演算を実行することができます。言語から file I/O ステートメントを削除することで、ほかの I/O ライブラリを Visual Basic .NET から容易に使用できるようになります。 File I/O ステートメントが言語に組み込まれ、識別子、予約語 Open、Close、Print、Write などが残っていると、処理が煩雑になります。
アップグレード ウィザード

File I/O ステートメントは、対応する関数にアップグレードされます。たとえば、次のとおりです。

Open "MyFile.txt" For Input As #1

は以下のようになります。

FileOpen(1, "MyFile.txt", OpenMode.Input)

Debug.Print

Visual Basic 6.0 Debug.Print を使用すると、[イミディエイト] ウィンドウにテキストの行が出力されます。
Visual Basic .NET

 

Debug.WriteLine を使用すると、[アウトプット] ウィンドウにテキストの行が出力されます。Debug.Write メソッドを使用して、ラインフィードなしで [アウトプット] ウィンドウにテキストを出力することもできます。

アップグレード ウィザード Debug.Print は Debug.WriteLine にアップグレードされます。

リソース ファイル

Visual Basic 6.0 Visual Basic 6.0 では、プロジェクトごとに .res ファイルを 1 つサポートしています。
Visual Basic .NET Visual Basic .NET では、リソースに対して幅広いサポートを行っています。フォームをバインドし、新しい .resX 形式のリソース ファイルからリソースを自動抽出します。CLR クラスはすべて .resX ファイルに格納されます。
アップグレード ウィザード ファイルは .res から .resX にアップグレードされ、コードは .resX ファイルから読み込まれるようになります。

Windows アプリケーション

Visual Basic のフォーム

Visual Basic 6.0 Visual Basic 6.0 には、グラフィカルな Windows アプリケーションの構築向けに固有のフォーム パッケージが備わっています。
Visual Basic .NET

Visual Basic .NET 向けに一新された Windows Forms というフォーム パッケージが備わっています。Windows Forms は、共通言語ランタイム (CLR) をターゲットとして新しく構築されたため、CLR のあらゆる機能を利用することができます。特に、Windows Forms パッケージでは展開、アプリケーションの分離、バージョン管理、およびコード アクセス セキュリティ機能を利用するため、構築した Windows ベース クライアント アプリケーションの展開と更新を簡単に行うことができます。ブラウザ展開の特性が同一の Windows Forms アプリケーションを HTML として構築することも可能です。コード アクセス セキュリティの粗雑な制御などの特性により、ブラウザの Windows Forms コントロールも使用されます。

Windows Forms セットは、表示スタイルの継承、ローカリゼーションおよびユーザー補助サポートの改良、フォームの自動サイズ調整、および埋め込みメニュー エディタなど、多くの新機能が備わっています。

アップグレード ウィザード Visual Basic のフォームは、Windows Forms にアップグレードされます。

PrintForm メソッド

Visual Basic 6.0 PrintForm メソッドは、Form オブジェクトをビット単位でプリンタに送信します。ただし、フォームによっては印刷機能が正しく動作しない場合があります。
Visual Basic .NET Windows Forms では、Visual Basic .NET に印刷機構が備わっており、複雑な文書も高速印刷することができます。この機能は、組み込みの [印刷プレビュー] ダイアログ ボックスからも使用することができます。
アップグレード ウィザード PrintForm メソッドを呼び出すと、アップグレード エラーのコメントが追加されます。新しい印刷機構を使用すると、印刷文書の作成だけでなく、アプリケーション ウィンドウのスクリーンショットを撮って印刷することもできます。

Circle、Cls、PSet、Line、および Point メソッド

Visual Basic 6.0 Circle、Cls、PSet、Line、および Point メソッドを使用すると、フォームにグラフィックを描画したり、消去することができます。
Visual Basic .NET Windows Forms には、Circle、Cls、PSet、Line、および Point の各メソッドに代わる新しいグラフィック コマンドが用意されています。Windows Forms パッケージは GDI+、機能が豊富な 2D テキスト、およびイメージング グラフィック ライブラリの最上位に構築されており、これらはすべて Visual Basic .NET から使用することができます。Visual Basic のプログラマがこれまでのバージョンでこのような類の機能を利用するには、Declare ステートメントと GDI API が必要でした。新しい環境の学習は決して容易ではありませんが、GDI+ の柔軟性と性能により、旧バージョンの Visual Basic では膨大な作業量を必要としたアプリケーションを迅速に開発できるようになります。
アップグレード ウィザード これらのメソッドを呼び出すと、アップグレード エラーのコメントが追加されます。System.Drawing で GDI+ クラスを使用し、グラフィックの呼び出しを記述することができます。

Caption プロパティ

Visual Basic 6.0 Label など一部のコントロールには、そのコントロールの内部または横に表示されるテキストを決定する Caption プロパティが設定されています。TextBox などのコントロールには、そのコントロールに含まれるテキストを決定する Text プロパティが設定されています。
Visual Basic .NET Windows Forms では、コントロール内のテキストを表示するプロパティは、どのコントロールにおいても一貫して Text と呼ばれます。これにより、コントロールの使用はより簡単になりました。
アップグレード ウィザード コントロールの Caption プロパティは Text に変更されました。

ScaleMode プロパティ

Visual Basic 6.0 ScaleMode プロパティは、グラフィック メソッドを使用している場合、またはコントロールを配置する場合にオブジェクトを調整するための計測単位を示す値を返すか、設定します。
Visual Basic .NET

Windows Forms では常にピクセル単位で測定を行うことでフォームが簡素化されています。

さらに、Windows Forms では、サイズ調整の方法が改良されています。AutoScaleBaseSize プロパティでは、使用する画面の解像度 (dpi) およびフォント サイズに応じて、スケールを自動的に調整します。

アップグレード ウィザード

"twips" を使用していたコード (Visual Basic 6.0 では既定の ScaleMode 設定) が完全にアップグレードされています。ScaleMode で twips が使用されていない場合は、サイズ調整に問題が発生します。

このトピックの詳細については、ホワイト ペーパー「Visual Basic .NET へのアップグレードを円滑に行うための Visual Basic 6.0 アプリケーションの準備」を参照してください。

フォント

Visual Basic 6.0 フォームおよびコントロールでは、すべての Windows フォントを使用することができます。
Visual Basic .NET フォームおよびコントロールで使用できるのは、TrueType または OpenType フォントのみです。これらのフォントを使用することで、オペレーティング システムのバージョンやローカライズ版のバージョンが異なる場合の不整合が解決されます。また、デバイスの解像度に依存しないほか、アンチエイリアス機能も備えています。
アップグレード ウィザード アプリケーションで TrueType でないフォントを使用している場合、Windows Forms の既定フォントに変更されます。ただし、サイズ、太字、斜体、下線などの書式設定は失われます。

Screen.MousePointer プロパティ

Visual Basic 6.0 Screen オブジェクトの MousePointer プロパティは、実行時にマウス ポインタがアプリケーションのフォーム外部に置かれている場合に、マウス ポインタの種類を示す値を返すか、設定します。
Visual Basic .NET マウス ポインタがアプリケーション内にある場合はフォームを操作することができますが、外部にある場合は操作することができません。この問題については、今後のリリースで対処する予定です。
アップグレード ウィザード Sceen.MousePointer を使用すると、アップグレード エラーのコメントが追加されます。

Timer.Interval プロパティ

Visual Basic 6.0 Timer コントロールの Interval プロパティは、Timer のイベントの呼び出しの間隔をミリ秒単位で返すか、設定します。0 に設定されている場合は、Timer コントロールが無効になります。タイマーを実行するかどうかは、Enabled プロパティで設定することもできます。Enabled プロパティを True に設定しても、間隔が 0 に設定されていればタイマーは有効にならないため、混乱を招くだけです。
Visual Basic .NET Interval プロパティは、タイマーが動作する間隔をミリ秒単位で示します。値を 0 に設定することはできません。タイマーを実行するかどうかは、Enabled プロパティで設定します。これにより、より直感的な動作が可能になり、Timer オブジェクトとのコード化が簡素化されます。
アップグレード ウィザード

アップグレード ウィザードで Timer.Interval が 0 に設定されていることが検出されると、アップグレード エラーのコメントが追加されます。

Visual Basic 6.0 アプリケーションでは Timer.Enabled を使用することをお勧めします。

コントロール配列

Visual Basic 6.0 コントロール配列とは、同じ名前および種類を共有するコントロールのグループです。同じイベント プロシージャを共有しています。コントロール配列には少なくとも要素が 1 つあり、システム リソースと使用可能なメモリ容量に応じて要素が増加します。コントロール配列が同じ要素には、固有のプロパティが設定されています。
Visual Basic .NET Windows Form アーキテクチャでは、コントロール配列が使用されていた多くのケースをネイティブに処理します。たとえば Windows Forms では、単一のイベント ハンドラを使用して、複数のコントロール上で複数のイベントを処理することができます。
アップグレード ウィザード 互換ライブラリの Control Array Windows Forms 拡張コントロールにこの機能が組み込まれています。
Visual Basic 6.0 Menu コントロールは、メニュー ツリーの各項目を表します。同じ Menu コントロールのインスタンスをメイン メニューまたはコンテキスト メニューとして同時に使用することができます。
Visual Basic .NET MenuItem コントロールは、メニュー ツリーの各項目を表します。MenuItem コントロールは、MainMenu 項目または ContextMenu 項目のいずれかに追加することができます。同時に両方に追加することはできません。MainMenu オブジェクトと ContextMenu オブジェクトでメニューを共有する場合は、CloneMenu メソッドを MenuItem で使用してコピーを作成することができます。
アップグレード ウィザード コンテキスト メニュー使用すると、アップグレード エラーのコメントが追加されます。MenuItem.CloneMenu を使用して MainMenu 項目のコピーを作成し、ContextMenu 項目として使用することができます。

OLE Container コントロール

Visual Basic 6.0 OLE Container コントロールを使用すると、フォームに OLE オブジェクトを追加することができます。
Visual Basic .NET Visual Basic .NET には OLE Container コントロールはありません。OLE Container コントロールと同等の機能が必要であれば、フォームに WebBrowser コントロールを追加し、OLE Container コントロールとして使用することができます。
アップグレード ウィザード アップグレード レポートにエラーが追加され、サポートされていないコントロールのプレースホルダがそのフォームに追加されます。

Image コントロール

Visual Basic 6.0 Image および PictureBox ボックス コントロールは、ビットマップ、アイコン、メタファイル、拡張メタファイル、JPEG、または GIF ファイルのグラフィックを表示します。
Visual Basic .NET Visual Basic 6.0 の PictureBox および Image コントロールに代わり、Visual Basic .NET では PictureBox コントロールが導入されました。Windows Forms の PictureBox コントロールでもアニメーション GIF をサポートしています。ただし、フォームへのイメージ描画を軽量のソリューションで行う場合には、フォームの OnPaint イベントを無効にし、DrawImage メソッドを使用してください。
アップグレード ウィザード Image コントロールは PictureBox コントロールに変更されました。

Line および Shape コントロール

Visual Basic 6.0 Line コントロールは、水平線、垂直線、または対角線を表示します。Shape コントロールは、長方形、正方形、楕円、円、丸みのある長方形、または丸みのある正方形を表示します。
Visual Basic .NET Line および Shape コントロールに代わり、System.Drawing の GDI+ クラスが導入されました。フォームにシェイプを描く場合は、OnPaint イベントを無効にしてから、GDI+ の Draw メソッドを使用して円や正方形などを描きます。
アップグレード ウィザード

水平線および垂直線の Line コントロールは、Label コントロール (テキストなし、高さまたは幅の設定を 1) に変更されました。対角線の Line コントロールについてはアップグレード レポートにエラーが追加され、サポートされていないコントロールのプレースホルダがそのフォームに追加されます。

長方形および正方形の Shape コントロールは、Label コントロールに変更されました。ほかの Shape コントロールについてはアップグレード レポートにエラーが追加され、サポートされていないコントロールのプレースホルダがそのフォームに追加されます。

ウィンドウレス コントロール

Visual Basic 6.0 ウィンドウレス コントロール呼ばれる軽量コントロールは、ウィンドウ ハンドル (hWnd プロパティ) を持たない点で通常のコントロールとは大きく異なります。このため、使用するシステム リソースはごくわずかです。軽量のユーザー コントロールを作成するには、デザイン時に Windowless プロパティを True に設定します。ただし、軽量のユーザー コントロールに含めることができるのは軽量のコントロールのみです。すべてのコンテナで軽量コントロールがサポートされているわけではありません。
Visual Basic .NET

Windows Forms では、ほとんどのウィンドウレス コントロールは、ウィンドウを持つように既定されています。ウィンドウレス コントロールの主な利点は、フォームに多量のコントロールがある場合、リソースの消費 (ウィンドウ ハンドル) を軽減できることです。これが適用されるのは Windows 9x のみです。Microsoft Windows NT および Microsoft Windows 2000 では、リソースを制約することはありません。

ウィンドウレス コントロールには、層などのレイアウトなど、いくらかの不都合もありますが、Microsoft はこれらの価値を認識し、Windows Forms で同様の効果を得る方法について今後サンプルを発表する予定です。

アップグレード ウィザード 操作は特に必要ありません。

Clipboard

Visual Basic 6.0 Clipboard オブジェクトは、システムのクリップボードにアクセスするための機能です。
Visual Basic .NET Clipboard クラスには、システムのクリップボードからデータを出し入れする機能が備わっています。新しい Clipboard クラスでは、さらに機能性を追及し、Visual Basic 6.0 の Clipboard オブジェクトよりも多くの形式をサポートします。これらをサポートするためにオブジェクト モデルが再構築されました。
アップグレード ウィザード 既存のクリップボードはオブジェクト モデルが異なるため、自動的にアップグレードすることはできません。Clipboard ステートメントには、アップグレード エラーのコメントが追加されます。

Dynamic Data Exchange

Visual Basic 6.0 Dynamic Data Exchange (DDE) 通信をサポートするプロパティおよびメソッドを持つコントロールが含まれています。
Visual Basic .NET Windows Forms には DDE サポートが組みこまれていません。
アップグレード ウィザード DDE のプロパティおよびメソッドにはアップグレードの警告が設定されます。

Web アプリケーション

WebClasses

Visual Basic 6.0 WebClass は、Web サーバーに常駐し、ブラウザからの入力に応答する Visual Basic のコンポーネントです。WebClass には通常 WebItems が含まれており、ブラウザへのコンテンツ表示やイベントの公開に使用されます。
Visual Basic .NET Web Forms は .NET Framework の機能で、Web アプリケーション向けにブラウザベースのユーザー インターフェイスを構築することができます。Visual Basic .NET では、ツールボックスのコントロールを使用して、グラフィカルな Web Form を WYSIWYG に作成することができます。これにより、Windows の開発と同じ感覚で Web のユーザー インターフェイスを開発することができます。また、プロジェクトが構築されると、新しいビットを展開するために Internet Information Services (IIS) サーバーを停止して再起動させる必要はありません。この処理は WebClasses で行われます。
アップグレード ウィザード

WebClasses は Web Forms にアップグレードされます。状態保存域の呼び出しにはアップグレードの警告が設定されます。再度書き込みを行い、ASP.NET の状態管理機能を利用することもできます。

Visual Basic 6.0 の WebClass アプリケーションを残し、Visual Basic.NET の Web Form から WebClass や WebForm などにナビゲートすることも可能です。

ActiveX ドキュメントおよび DHTML アプリケーション

Visual Basic 6.0 ActiveX ドキュメントは、Web ブラウザのウィンドウで表示することができます。また、ビューポート スクロール、ハイパーリンク、およびメニュー ネゴシエーションなどの機能が組み込まれています。DHTML アプリケーションには、DHTML ページおよびクライアントサイドの ActiveX DLL が含まれています。
Visual Basic .NET Web Forms では、標準の HTML を使用してアプリケーション全体をサポートします。ブラウザでホストされている Windows Forms のコントロールを使用すれば、セキュリティを保護しながら豊富なアプリケーションをサポートすることができます。また、"安全な Windows Form" の EXE をダウンロードして使用することもできます。このコードはセキュリティ保護された場所で実行されるため、ユーザーのコンピュータに損傷を与えることはありません。
アップグレード ウィザード ActiveX ドキュメントおよび DHTML アプリケーションは直接アップグレードできませんが、ActiveX ドキュメント、DHTML アプリケーション、および Web Forms を利用することは可能です。

データ

ADO、RDO、および DAO コード

Visual Basic 6.0 ActiveX Data Object (ADO)、Remote Data Object (RDO)、および Data Access Object (DAO) オブジェクトは、接続および非接続のデータ アクセスに使用されます。
Visual Basic .NET ADO.NET には、非接続データ アクセス用のクラスが追加されています。これらのクラスを分散アプリケーションで使用した場合、これまでの ADO のバージョンに比べてパフォーマンスおよびスケーラビリティが改善されました。また、データベースのデータと XML データとの統合を容易に行うことができます。
アップ グレード ウィザード ADO、RDO、および DAO は、現在も Visual Basic.NET コードで使用することができます。

ADO、RDO、および DAO のデータ バインド

Visual Basic 6.0 Visual Basic フォームのコントロールを ActiveX Data Object (ADO)、Remote Data Object (RDO)、および Data Access Object (DAO) のデータ ソースにバインドすることができます。
Visual Basic .NET ADO.NET には、コントロールに読み取りおよび書き込みを行う Windows Forms 向けのデータ バインド、および Web Form 向けの読み取り専用データ バインドの機能が備わっています。
アップグレード ウィザード ADO のデータ バインドは、新しい ADO.NET データ バインドにアップグレードされます。ただし、RDO および DAO のデータ バインドはアップグレードされないため、アップグレード レポートにエラーが追加されます。

IDE(統合開発環境)

[イミディエイト] ウィンドウ

Visual Basic 6.0 デザイン モードで [イミディエイト] ウィンドウを使用すると、Startup オブジェクトでアプリケーション全体を起動することなく、そのコードの一部を実行することができます。たとえば、フォーム、呼び出しモジュールのプロシージャを表示したり、グローバル変数と相互作用させることができます。これは、Visual Basic 6.0 ではコードのインメモリ イメージからアプリケーションを実行し、実行時で使用されたビルトのアウトプットをデバッグしないためです。
Visual Basic .NET デザイン モードのコマンド プロンプトで IDE コマンドを実行することはできますが、アプリケーションの一部を個別に実行することはできません。これは、Visual Basic .NET が実行時で実際に使用されたビルトのアウトプットを実行およびデバッグしているためです。このデバッグにより、実行時の動作を正確に再現することができます。

IDE および Project の拡張性

Visual Basic 6.0 Visual Basic 6.0 に統合された開発環境 (IDE) の拡張性モデルをサポートしているのは、Visual Basic 6.0 のみです。
Visual Basic .NET

新しい IDE の拡張性モデルは、Visual Studio.NET 内のあらゆるプロジェクトのタイプに対する総称です。これにより、多種多様なプロジェクトのタイプを処理するアドインの作成が簡便化されます。Visual Basic プロジェクト システムの拡張性モデルは C# とも共有されます。したがって、参照の追加やプロジェクト プロパティの変更など、プロジェクト特有の機能がどちらの言語でも同様に実行されます。

Visual Studio.NET コード モデルにより共通のオブジェクト モデルの記述の拡張性が高まり、異種言語のプロジェクトのコードも処理できるようになります。Visual Basic は、コード モデル全体においてコードの読み取りをサポートしています。コードを記述するには、モデルにカーソルを置き、Visual Basic の構文を入力します。

 

ページのトップへ