継承を利用して共通の画面デザインを作成する方法

Cc440871.download(ja-jp,MSDN.10).gif サンプル コードのダウンロード (vbmigtips_inheritance.exe, 106 KB)

Visual Basic 6.0 では、インターフェイスの継承を行うことができましたが、実装の継承を行うことができませんでした。しかし、Visual Basic .NET では、クラスの継承を行うことができるようになりました。では、クラスの継承が行えるようになったことにより、プログラム構成はどのように変わるのでしょう。今回は、一例として、共通の画面デザイン (図1 と図2) を持ったフォームを作成する場合について説明します。

Visual Basic 6.0 では実装の継承ができなかったため、共通の画面デザインを作成する場合、各フォームで作成する必要がありました。各フォームの実装コードは以下のとおりです。

 Cc440871.inheritance_fig01(ja-jp,MSDN.10).gif
 図1

 Cc440871.inheritance_fig02(ja-jp,MSDN.10).gif
 図2

【Form1】 (図1)
Private m_form2 As Form2

Private Sub Command1_Click()
If m_form2 Is Nothing Then
Set m_form2 = New Form2
End If
m_form2.Show
End Sub

Private Sub Command2_Click()
Unload Me
End Sub

【Form2】 (図2)
Private Sub Command1_Click()
Unload Me
End Sub

リスト1

上図のように共通の画面デザインを複数作成する場合、それぞれに対して設定するのはとても手間がかかります。一度作成したフォームを再利用することができれば、作業効率も飛躍的に向上されます。そこで、上記で紹介したプロジェクトを Visual Baisc .NET でクラス継承を利用して実装する方法を紹介します。

まず、元となるフォーム (図3) を作成します (フォーム名は「MSBaseForm」とします)。これが継承元のクラスとなります。

 Cc440871.inheritance_fig03(ja-jp,MSDN.10).gif
 図3

このフォームでは、2 つの Lable コントロールと PictureBox コントロールを配置し、「Microsoft」ロゴを表示しています。そして、BaseTitle プロパティを実装します。図 3 の実装コードは以下の通りです。

Public Class MSBaseForm
Inherits System.Windows.Forms.Form
......
Public Property BaseTitle() As String
Get
Return BaseLable.Text
End Get
Set(ByVal Value As String)
BaseLable.Text = Value
End Set
End Property
End Class

リスト2

続いて、作成したフォーム (図 3) を継承し、継承先のフォームにボタンを設置します。実装コードは以下のとおりです。

【Form1】
Public Class Form1
Inherits MSBaseForm
....
Private m_form2 As Form2

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
If m_form2 Is Nothing OrElse m_form2.IsDisposed Then
m_form2 = New Form2
End If
m_form2.Show()
End Sub

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Me.BaseTitle = "トップ画面"
End Sub

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Me.Close()
End Sub
End Class

【Form2】
Public Class Form2
Inherits MSBaseForm
.....
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Me.Close()
End Sub

Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Me.BaseTitle = "2/2 ページ目"
End Sub
End Class

リスト3

フォームを継承する場合、「Inherits System.Windows.Forms.Form」を上記コード (リスト2) の「Inherits MSBaseForm」のように、継承元のフォーム (MSBaseForm) を指定します。これにより Visual Basic 6.0 で行っていた、各フォームでの設定は不要となります。各ボタンの実装では、自身のフォームを閉じる「Unload Me」が「Me.Close()」に変更され、「m_form2.Show」の「Show メソッド」の引数が変更される以外、大きな変更はありません。上記のコードを実装すると、下図のように同じ背景のフォームを簡単に作成することができます。

 Cc440871.inheritance_fig04(ja-jp,MSDN.10).gif
 図4

 Cc440871.inheritance_fig05(ja-jp,MSDN.10).gif
 図5