連載:アップグレード・ウィザードに学ぶVB 6→VB 2005

第1回 AppオブジェクトからMyオブジェクトへ

グレープシティ株式会社 八巻 雄哉
2007/01/13

 Visual Basic 6.0(以下VB 6)には、アプリケーションに関する情報を扱うための「Appオブジェクト」やプリンタへの出力機能を提供する「Printerオブジェクト」といった、いわゆる特殊オブジェクトと呼ばれる便利なオブジェクトが用意されていました。

 .NETでは、これらの機能は.NET Frameworkクラス・ライブラリの一部として提供されています。ところが.NET Frameworkクラス・ライブラリはVB 6の特殊オブジェクトとは比べものにならないくらい膨大になっています。VB 6開発者が、「いったいどうやって自分が実現したい機能を持っているクラスを探せばいいの?」と思うのも無理はありません。

 しかし逆に考えれば、標準でできることが比べものにならないくらい増えているということですから、何としても.NETに移行したいとも思うわけです。というわけで、本連載ではそんなVB 6開発者のための.NET入門方法の1つとして、Visual Basic 2005(以下VB 2005)の「アップグレード・ウィザード」の利用を提案します。


VB 2005のアップグレード・ウィザードの起動画面
アップグレード・ウィザードはVB 2005でVB 6のプロジェクト(.vbpファイル)を開けば起動する。

 アップグレード・ウィザードは、その名のとおりVB 6のプロジェクトを.NETで実行できる形式に変換してくれる移行ツールです。しかしながら、VB 6のソース・コードを.NETの形式へ変換してくれるため、VB 6でこう書いていたコードを.NETではどう書けばいいのかということを知るためにももってこいのツールなのです。

 この連載では、VB 6の特殊オブジェクトを使って行っていた機能を.NETでどのように実現すればよいのかといった部分を中心に、アップグレード・ウィザードを使いながら解説していきたいと思います。

AppオブジェクトとMyオブジェクト

 記念すべき最初の特殊オブジェクトはAppオブジェクトです。変換する前のVB 6のサンプル・コードがリスト1になります。

' アプリケーションが2重に起動しないようにします。
If App.PrevInstance = True Then
  MsgBox ("このアプリケーションはすでに起動しています。")
  End
End If

' ラベルにアプリケーションのタイトルを表示します。
Label1.Caption = App.Title

' ラベルにアプリケーションのバージョン番号を表示します。
Label2.Caption = "バージョン:" & App.Major & "." & App.Minor & "." & App.Revision

' アプリケーションの実行フォルダにある画像ファイルを表示します。
Picture1.Picture = LoadPicture(App.Path & "\samplepicture.jpg")
リスト1 Appオブジェクトを使ったVB 6のコード
フォーム上には2つのラベルと1つのピクチャーボックスが配置されているものとする。

 そして、アップグレード・ウィザードを使ってリスト1のコードを変換した結果がリスト2です。

' アプリケーションが2重に起動しないようにします。
'UPGRADE_ISSUE: App プロパティ App.PrevInstance はアップグレードされませんでした。 詳細については、'ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?keyword="076C26E5-B7A9-4E77-B69C-B4448DF39E58"' をクリックしてください。
If App.PrevInstance = True Then
  MsgBox("このアプリケーションはすでに起動しています。")
  End
End If

' ラベルにアプリケーションのタイトルを表示します。
Label1.Text = My.Application.Info.Title

' ラベルにアプリケーションのバージョン番号を表示します。
Label2.Text = "バージョン:" & My.Application.Info.Version.Major & "." & My.Application.Info.Version.Minor & "." & My.Application.Info.Version.Revision

' アプリケーションの実行フォルダにある画像ファイルを表示します。
Picture1.Image = System.Drawing.Image.FromFile(My.Application.Info.DirectoryPath & "\samplepicture.jpg")
リスト2 アップグレード・ウィザードで変換したVB 2005のコード

 リスト1とリスト2を見比べると、すべてではありませんがAppオブジェクトのメンバが「My.Application〜」という名前に置き換えられていることが分かります。VB 2005では、頻繁に使用する機能が“My”というオブジェクトに集まっており、そういった機能に簡単にアクセスできるようになっています。“My”機能の詳細については「“My”はクラスの海からVBプログラマを救う!?」ですでに紹介されていますので、そちらをご覧ください。

 ここで1つだけ注意しておきたいのは、“My.Application”はクラスではなくオブジェクトであるということです。インスタンスを作成する必要がないため、VB 6の特殊オブジェクトと同様の感覚で使うことができますが、これは.NETでは逆に特殊な存在であるということを覚えておいてください。

 変換されたコードをもう少し詳しく見ていきましょう。まず、 の部分については、次の表のようにそのまま対応するメンバが用意されているので、特に問題はないでしょう。

VB 6 VB 2005
App.Title My.Application.Info.Title
App.Path My.Application.Info.DirectoryPath
表 AppオブジェクトとMyオブジェクトの対応

■アプリケーションの2重起動防止

 次に のPrevInstanceプロパティですが、これはまったく変換されていないことが分かります。

 VB 2005(“My.Application”)ではPrevInstanceプロパティに相当する直接的なメンバは用意されていません。PrevInstanceプロパティはアプリケーションのインスタンスがすでに実行中かどうかを表すプロパティで、多くのVB 6アプリケーションが2重起動を防ぐためにこのプロパティを使用していました。

 VB 2005では、アプリケーションの2重起動を防ぐための機能をプロジェクトのプロパティとして持っています。このプロパティを設定することにより2重起動を禁止できます。以下にその設定方法を記します。

  1. ソリューション・エクスプローラでプロジェクトが選択されている状態で、[プロジェクト]メニューの[プロパティ]をクリックします
  2. [アプリケーション]タブをクリックします。
  3. [アプリケーションフレームワークを有効にする]チェック・ボックスにチェックを入れます。
  4. [単一インスタンスのアプリケーションを作成する]チェック・ボックスにチェックを入れます。


プロジェクトのプロパティの[アプリケーション]タブ
VB 2005ではプロジェクトのプロパティ設定だけでアプリケーションの2重起動を禁止できる。
  [アプリケーションフレームワークを有効にする]チェック・ボックスにチェックを入れる。
  [単一インスタンスのアプリケーションを作成する]チェック・ボックスにチェックを入れる。

■アプリケーションのバージョン番号

 最後に、 の部分は問題なく変換されているように見えますが、VB 6とVB 2005ではバージョンに関する概念や形式が少し異なることに注意しなければなりません。

 VB 6でAppオブジェクトのMajorプロパティなどから取得できるバージョン番号というのは、単純に作成されるexeファイルのファイル・バージョンとなっていました。VB 6にはこのファイル・バージョン以外にバージョンという概念はなかったわけですが、VB 2005ではこれに加えアセンブリ・バージョンが存在します。

 アセンブリ・バージョンは.NETが厳密に管理してくれるバージョンであり、アップグレード・ウィザードによって変換されたMy.Application.Info.Version.Majorなどは、アセンブリ・バージョンを参照します。

 また、VB 6のAppオブジェクトには3番目のバージョン番号(=ビルド番号)に該当するプロパティはありませんでしたが、VB 2005ではMy.Application.AppInfo.Version.Buildが用意されています。

VB 6 VB 2005
App.Major My.Application.AppInfo.Version.Major
App.Minor My.Application.AppInfo.Version.Minor
なし My.Application.AppInfo.Version.Build
App.Revision My.Application.AppInfo.Version.Revision
バージョンに関するプロパティの対応

 なお、VB 2005でバージョン番号全体を表示させたい場合には、読み取り専用のプロパティとして用意されているMy.Application.Info.Versionプロパティを使って、下記のように記述することもできます。

Label2.Text = "バージョン:" & My.Application.Info.Version.ToString()
リスト3 My.Application.Info.Versionプロパティを使ったコード例

 以上、今回はAppオブジェクトの主要なプロパティについて変換を行いました。VB 2005から登場した“My”機能のおかげで、VB 6開発者にとってもそれほど違和感のないものになっているのではないかと思います。Appオブジェクトにはほかにもプロパティやメソッドがあります。時間のある方は、それらについてもぜひアップグレード・ウィザードを使って変換してみてください。では、次回をお楽しみに。End of Article

 

インデックス・ページヘ  「アップグレード・ウィザードに学ぶVB 6→VB 2005」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)
- PR -

注目のテーマ

業務アプリInsider 記事ランキング

本日 月間
ソリューションFLASH