■ フォームのプロパティ、メソッド、イベント

  • 主な変更点

    デフォルトボタン、キャンセルボタン
    座標の単位の変更
    グラフィックメソッド
    イベントとイベントプロシージャ

変更ポイント

プロパティ、メソッド、イベントのいくつかはそのまま利用できますが、変更されているものもあります。ここでは、重要な変更点を紹介します。

デフォルトボタン、キャンセルボタン

デフォルトボタンとキャンセルボタンの設定は、Visual Basic 6.0 ではボタン側の設定 (DefaultButton、CancelButton プロパティ) でした。Visual Basic .NET では、これがフォーム側の設定になりました。フォームの AcceptButton プロパティに設定されたボタンがデフォルトボタンに、CancelButton プロパティに設定されたボタンがキャンセルボタンになります。

座標の単位の変更

Visual Basic 6.0 では座標の単位 (ScaleMode) をセンチ、インチなどが選択でき、デフォルトは Twip でした。Visual Basic .NET では、座標の単位は Pixel だけになります。

グラフィックメソッド

Visual Basic 固有フォームには、Circle、CLS、PSet、Line、および Point などのグラフィック関連のメソッドがありました。しかし、これに対応するメソッドは、Windows フォームにはありません。しかし、その代わりにより強力な、新しい GDI+ (グラフィックスコマンドのセット) が提供されます (PlusOne 参照)。これにより、今まで Win32 API を利用しなければならなかったような、高度なグラフィック機能が実現できるようになります。

また、Windows フォームは Form.PrintForm メソッドをサポートしていません。

イベントとイベントプロシージャ

フォームの初期化処理のために New プロシージャを、また、終了処理のために Dispose プロシージャを利用します。Finalize イベントは、ガベージコレクションが行なわれるまで発生しませんが、Dispose プロシージャに記述した処理は、フォームを破棄するとすぐに実行されます。

フォームの構築、表示~破棄に関連するイベントの対応を表 1 に示します。

これらのイベントは Visual Basic 6.0 に比べ、名前が明確になりました。ただし、その意味やタイミングが多少変更されている場合もあるので確認が必要です。たとえば、Visual Basic 6.0 の Activate イベントと Deactivate イベントは、アプリケーション内でのアクティブ/非アクティブの切り替えのときにのみ発生していましたが、Visual Basic .NET の Activated イベントと Deactivate イベントは、他のアプリケーションから切り替えられたときにも発生します。

DblClick は、DoubleClick イベントに名前が変わっていますが、意味は同じです。

このように、従来のイベントは、ほとんどが利用可能です。ただし、Linkxxx や OLExxx など、提供されなくなる機能、実現方法が変わる機能などに対応するイベントは Visual Basic .NET には存在しません。

その一方で、新しいイベントがかなり増えているため、今まで以上に詳細な動作設定が可能となります。

Visual Basic 6.0 Visual Basic .NET
Initialize イベント (New プロシージャ)
Load イベント Load イベント
Activate イベント Activate イベント
Deactivate イベント Deactivate イベント
QueryUnload イベント Closing イベント
Unload イベント Closed イベント
Terminate イベント (Dispose プロシージャ)
  Finalize イベント

表 1:フォーム構築、表示~破棄に関連するイベント

アップグレードウィザードによる変更点

デフォルトボタン、キャンセルボタン

すでにコントロールに設定されているデフォルトボタンとキャンセルボタンの設定は、適切に Windows フォームの AcceptButton プロパティおよび CancelButton プロパティに反映されます。

座標の単位の変更にともなう変更

座標系は Twip がデフォルトであったことが考慮され、フォームの座標の単位をTwipであると仮定して、コントロールなどが配置されます。

グラフィックメソッド

Visual Basic 6.0 のグラフィックメソッドと、Visual Basic .NET でのグラフィックのための新しいオブジェクトモデルは大きく異なるため、これらのメソッドはアップグレードされません。

イベントとイベントプロシージャ

対応するイベントプロシージャに適切に置き換えられます。たとえば、Activate は Activated イベントプロシージャに置き換えられます。また、対応するイベントがない場合には、そのプロシージャを呼び出すためのコードが追加されるなどして、できる限りのアップグレードを行なってくれます。

たとえば、Initialize、Terminate イベントに対応するものがないため、それぞれ、Form_Initialize_Renamed()、Form_Terminate_Renamed() に置き換えられ、それを呼び出すためのコードが New、Dispose プロシージャに追加されます。

名前が変更されていない場合でも、イベント発生のタイミングや意味が微妙に変更されているものもあるので、アップグレードコメントにしたがって変更点を確認する必要があります。

今、何をしておくべきか?

グラフィック関連の機能はほとんど利用できなくなるため、今から心がけておくことはありません。ただ、座標単位に関しては、上述したように、アップグレードの際、ScaleMode はデフォルトの Twip であると仮定してピクセル値に変換します。つまり、ScaleMode を変更していない場合には、フォーム上のコントロールが正しいサイズにアップグレードされます。アプリケーション内で、できるだけデフォルトの ScaleMode である Twip を使用しておくと、Visual Basic .NET での手直しが少なくてすみます。

関連・補足項目

プロパティ、メソッド、イベントは、そのクラスだけでなく、そのクラスの継承元のクラス (これを基本クラスといいます) で定義されています。

紹介したクラス階層を理解しておくと、各クラスの提供する機能の理解に役立ちます。

PlusOne**GDI+ ******

GDI (Windows API が提供する描画機能) の .NET バージョンが GDI+ です。GDI+ は .NET Framework の一部として提供され、強力な描画機能をサポートします。

たとえば、基本的な図形 (四角形、楕円、多角形など) や、文字列、ビットマップやカーソルの描画を実現します。また、文字列をビットマップで描画したり、グラデーションを指定して図形を描画したりする 「効果」 を指定することができます (リスト 1・図 4)。

ポイントは、常に文字列や図形が描画されるためには、"Form の Paint イベントに描画処理を記述する" ことです。このイベントを利用することで、アイコン化して戻されたときや、別のウィンドウに隠れていたウィンドウが復活したときに適切に再描画されます。

                    
Private Sub Form1_Paint(ByVal sender As Object, _
            ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint
    Dim grph As Graphics = e.Graphics
    ' Dim grph As Graphics = Me.CreateGraphics()    'Paint イベント以外の時
    Dim brsh As Brush   '普通のプラン
    Dim gbrsh As Drawing.Drawing2D.LinearGradientBrush  'グラデーション
    Dim fnt As Font 'フォント
    Dim p1 As New Point(10, 10), p2 As New Point(600, 300)
    ' 描画ツールを準備します
    brsh = New TextureBrush(New Bitmap("c:\winnt\シャボン.bmp"))
    gbrsh = New Drawing2D.LinearGradientBrush(p1, p2, Color.Blue, Color.Red)
    fnt = New Font("Arial Black", 50, Drawing.FontStyle.Bold)
    ' 描画します
    grph.DrawString("Visual Basic .NET", fnt, brsh, 10, 10)
    grph.FillRectangle(gbrsh, 40, 110, 640, 30)
End Sub

リスト 1:文字列をビットマップで表示し、図形にグラデーションをかける

図 4:リスト 1 の実行結果

図 4:リスト 1 の実行結果