連載

改訂版 プロフェッショナルVB.NETプログラミング

Chapter 07 Windowsアプリケーションの構造

株式会社ピーデー 川俣 晶
2004/05/13
Page1 Page2 Page3


 本記事は、(株)技術評論社が発行する書籍『VB6プログラマーのための入門 Visual Basic .NET 独習講座』の一部分を許可を得て転載したものです。同書籍に関する詳しい情報については、本記事の最後に掲載しています。

 Visual Basicの主役といえば、フォーム上にコントロールを配置し、ウィンドウ表示で実行されるWindowsアプリケーションである。このほかにも多くの種類のプログラムが開発可能になっており、その種類もVB.NETでさらに増えているが、Visual Basicの最初のバージョンから一貫してサポートされてきたものがWindowsアプリケーションである。その構造は、これまで大きく変化することはなかったが、VB.NETでは大きく変わっている部分がある。本連載は、言語仕様の変化を中心に扱うため、個々のコントロールの詳細には立ち入らないが、基本的な書き方の相違はこの章で解説している。Windowsアプリケーション開発者は、この章の内容を活用していただきたい。

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

 フォーム上にボタンを1個配置し、そのボタンをクリックしたときにメッセージボックスを表示するプログラムを作成して、VB 6とVB.NETの場合を比較してみよう。

 まず、VB 6の場合は図7-1のようにフォーム上にボタンを貼り付ける。ボタンを貼り付けたら、そのボタンをダブルクリックして、コードを「MsgBox "Clicked!"」と入力する。フォームやボタンのサイズは適当に調整しよう。

●図7-1 VB 6でフォームにボタンを配置し、そのボタンをダブルクリックしてコードを入力

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

1: Private Sub Command1_Click()
2:   MsgBox "Clicked!"
3: End Sub
リスト7-2 メッセージボックスを表示するプログラム

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

●図7-3 リスト7-2の実行画面(左)と、Command1ボタンをクリックすると開くメッセージボックス(右)

 見てのとおり、ソース・コードはたったの3行である。Command1_Clickというプロシージャが、Command1というボタンのクリックイベントに対応することは容易に推測できる。もしかしたら、Privateといったキーワードの意味が分からないかもしれないが、システムが自動的に挿入してくれるものであるし、無視する気になれば容易に無視できるものである(Privateは、そのクラス外から利用することができないようにする役割を持つキーワード。VB 6にもあるキーワードなので、本連載では詳しい解説は行っていない)。

 では、次にVB.NETで同じことをしてみよう。まず、フォームはVB 6で作成したのと同様に作成することができる。

●図7-4 VB.NETでフォームにボタンを配置し、そのボタンをダブルクリックしてコードを入力

 次にボタンをダブルクリックして、ボタンのイベント処理メソッドを作成させ、「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
リスト7-5 メッセージボックスを表示するプログラム

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

●図7-6 リスト7-5の実行画面(左)と、Button1ボタンをクリックすると開くメッセージボックス(右)

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

 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(216, 40)
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(232, 53)
49:     Me.Controls.Add(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
リスト7-7 VB.NETでのソース・コード全文(Visual Studio .NET 2003でのもの。 2002の場合は少し異なるが基本的には同じである)

 このように、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は難しくなったかのような印象を与えるかもしれない。もちろん、自動的に生成されるコードのことは知らなくても構わないという考え方もある。しかし、これらのコードは決して無意味に存在するものではない。意味を知っていれば、さまざまな応用に利用できるものであるから、次節で詳しく解説する。

 なお、Handlesキーワードに関しては、イベントを処理する(本連載Chapter 12で公開予定)で解説を行っている。


 INDEX
  [連載] 改訂版 プロフェッショナルVB.NETプログラミング
  Chapter 07 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メールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)
- PR -

注目のテーマ

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

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