連載

プロフェッショナルVB.NETプログラミング
―― VB 6プログラマーのためのVB.NET入門 ――

第24回 Windowsアプリケーションの仕組み

(株)ピーデー
川俣 晶
2002/11/09

Page1 Page2 Page3

単純なWindowsアプリケーション

 フォーム上にボタンを1個配置し、そのボタンをクリックしたときにメッセージ・ボックスを表示するプログラムを作成して、VB 6(Visual Basic 6.0)とVB.NET(Visual Basic .NET)の場合を比較してみよう。まずVB 6の場合から。以下のようにフォーム上にボタンを貼り付ける。ボタンを貼り付けたら、そのボタンをダブルクリックしてコードをMsgBox "Clicked!"と入力する。

VB 6でフォームにボタンを配置し、そのボタンをダブルクリックしてコードを入力(コードはサンプル・プログラム1)

 コードは以下のようになる。

 1: Private Sub Command1_Click()
 2:   MsgBox "Clicked!"
 3: End Sub
メッセージ・ボックスを表示するVB 6のサンプル・プログラム1

 これを実行すると以下のようになる。

サンプル・プログラム1の実行画面 [Command1]ボタンをクリックすると開くメッセージ・ボックス

 見てのとおり、ソース・コードはたったの3行である。Command1_Clickというプロシージャが、Command1というボタンのクリック・イベントに対応することは容易に推測できる。もしかしたら、Privateといったキーワードの意味が分からないかもしれないが、システムが自動的に挿入してくれるものであるし、無視する気になれば容易に無視できるものである。

 では次にVB.NETで同じことをしてみよう。フォームは以下のように同じように作成できる。

VB.NETでフォームにボタンを配置し、そのボタンをダブルクリックしてコードを入力(コードはサンプル・プログラム2)

 次にボタンをダブルクリックして、ボタンのイベント処理メソッドを作成させ、MsgBox( "Clicked!")とイベント処理の内容を入力する。

 1: Public Class Form1
 2:   Inherits System.Windows.Forms.Form
 3:
 4: …Windows フォーム デザイナで生成されたコード…
 5:
 6:   Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
 7:     MsgBox("Clicked!")
 8:   End Sub
 9: End Class
メッセージ・ボックスを表示するVB.NETのサンプル・プログラム2

 これを実行すると以下のようになる。

サンプル・プログラム2の実行画面 [Button1]ボタンをクリックすると開くメッセージ・ボックス

 見てのとおり、VB 6では3行だったものが、9行になった。しかし、9行ですべてというわけではない。VB.NET上で、「Windows フォーム デザイナで生成されたコード」と書かれた行の左側に見える四角に囲まれた「+」記号をクリックすると、隠されたコードが現れる。参考までにその内容を以下に示す。

  1: Public Class Form1
  2:   Inherits System.Windows.Forms.Form
  3:
  4: #Region " Windows フォーム デザイナで生成されたコード "
  5:
  6:   Public Sub New()
  7:     MyBase.New()
  8:
  9:     ' この呼び出しは Windows フォーム デザイナで必要です。
 10:     InitializeComponent()
 11:
 12:     ' InitializeComponent() 呼び出しの後に初期化を追加します。
 13:
 14:   End Sub
 15:
 16:   ' Form は dispose をオーバーライドしてコンポーネント一覧を消去します。
 17:   Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
 18:     If disposing Then
 19:       If Not (components Is Nothing) Then
 20:         components.Dispose()
 21:       End If
 22:     End If
 23:     MyBase.Dispose(disposing)
 24:   End Sub
 25:
 26:   ' Windows フォーム デザイナで必要です。
 27:   Private components As System.ComponentModel.IContainer
 28:
 29:   ' メモ : 以下のプロシージャは、Windows フォーム デザイナで必要です。
 30:   ' Windows フォーム デザイナを使って変更してください。
 31:   ' コード エディタは使用しないでください。
 32:   Friend WithEvents Button1 As System.Windows.Forms.Button
 33:   <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
 34:     Me.Button1 = New System.Windows.Forms.Button()
 35:     Me.SuspendLayout()
 36:     '
 37:     'Button1
 38:     '
 39:     Me.Button1.Location = New System.Drawing.Point(8, 8)
 40:     Me.Button1.Name = "Button1"
 41:     Me.Button1.Size = New System.Drawing.Size(192, 32)
 42:     Me.Button1.TabIndex = 0
 43:     Me.Button1.Text = "Button1"
 44:     '
 45:     'Form1
 46:     '
 47:     Me.AutoScaleBaseSize = New System.Drawing.Size(5, 12)
 48:     Me.ClientSize = New System.Drawing.Size(208, 53)
 49:     Me.Controls.AddRange(New System.Windows.Forms.Control() {Me.Button1})
 50:     Me.Name = "Form1"
 51:     Me.Text = "Form1"
 52:     Me.ResumeLayout(False)
 53:
 54:   End Sub
 55:
 56: #End Region
 57:
 58:   Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
 59:     MsgBox("Clicked!")
 60:   End Sub
 61: End Class
VB.NETにより自動生成されたコードも含めた、サンプル・プログラム2の全ソース・コード

 見てのとおり、VB 6ではたった3行なのに、VB.NETでは61行にもなっている。単に行数が多いだけではない。イベント処理を行うメソッドの宣言を見比べてほしい。VB 6では、

Private Sub Command1_Click()

となっていて、引数は存在せず、非常にシンプルである。それに対して、VB.NETでは、

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

と非常に長くなっていることが分かるだろう。引数は2個あり、その上、Handles Button1.Clickという見慣れないキーワードも付いている。これらの相違は、VB 6に比べてVB.NETは難しくなったかのような印象を与えるかもしれない。もちろん、自動的に生成されるコードのことは知らなくても構わないという考え方もある。しかし、これらのコードは決して無意味に存在するものではない。意味を知っていれば、さまざまな応用に利用できるものである。今回および次回は、そのための解説を行うことを意図している。


 INDEX
  連載 プロフェッショナルVB.NETプログラミング
  第24回 Windowsアプリケーションの仕組み
  1.単純なWindowsアプリケーション
    2.フォーム・デザイナの役割と生成されたコード
    3.ボタンの配置により生成されるコード
 
「プロフェッショナルVB.NETプログラミング」


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メールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間