次の方法で共有


Windows フォームを使用する Windows クライアント

ここまでに見てきた例はすべて、システム コンソールに書き込みを行うコマンド ライン プログラムです。ここまでは開発プロセス全体を見てきましたが、ここからは、すべての .NET 言語で利用できる新しい Windows フォーム ライブラリを使用できるように、クライアント アプリケーションを変更していきます。この例では Visual Basic を使用し、その完全なソース コードを次に示します。

リスト 1. Visual Basic での Windows フォーム クライアント (ClientWinForms.vb)

Option Explicit
Option Strict

Imports System
Imports System.Collections
Imports System.Drawing
Imports System.Threading
Imports System.Windows.Forms

Imports CompCS
Imports CompVB
Imports CompVC

Public Module modmain
   Public Const vbCrLf as String = 
      Microsoft.VisualBasic.ControlChars.CrLf
   Public Class Client
      Inherits Form

      ' This code is required by the Windows Forms Designer.
      Private components As 
         System.ComponentModel.Container
      Private Button2 As System.Windows.Forms.Button
      Private Button1 As System.Windows.Forms.Button
      Private Label1 As System.Windows.Forms.Label

      Public Sub New()
         MyBase.New
         InitForm  'Required by the Windows Forms Designer.
      End Sub

      'Form overrides Dispose(Boolean) to clean up component list
      '(this Form has no components), then disposes of the base class
      Protected Overloads Overrides Sub Dispose(disposing As Boolean)
            If disposing Then
                  If Not (components Is Nothing) Then 
                        components.Dispose()
                  End If
            End If
            MyBase.Dispose(disposing)
      End Sub 

      ' This is the Main entry point for the application.
      Shared Sub Main()
         Application.Run(New Client)
      End Sub

      ' This procedure is required by the Windows Forms Designer.
      ' It can be modified using the Windows Forms Designer.  
      ' Do not modify it using the code editor.
      Private Sub InitForm()
          Me.Button1 = New Button
          Me.Button2 = New Button
          Me.Label1 = New Label

          Button1.Location = new Point(200, 230)
          Button1.TabIndex = 1
          Button1.Text = "&Close"
          Button1.Size = new Size(75, 23)
          AddHandler Button1.Click, New 
             System.EventHandler(AddressOf 
             Me.Button1_Click)

          Button2.Location = new Point(120, 230)
          Button2.TabIndex = 2
          Button2.Text = "&Execute"
          Button2.Size = new Size(75, 23)
          AddHandler Button2.Click, New 
             System.EventHandler(AddressOf 
             Me.Button2_Click)

          Label1.Location = new Point(8, 8)
          Label1.TabIndex = 0
          Label1.TabStop = False
          Label1.Text = ""
          Label1.Size = new Size(272, 232)

          Me.Text = "Client"

          Me.Controls.Add(Button2)
          Me.Controls.Add(Button1)
          Me.Controls.Add(Label1)

      End Sub

      Private Sub Button1_Click(ByVal sender As 
         System.Object, ByVal e As System.EventArgs) 
          Me.Close
      End Sub

      Private Sub Button2_Click(ByVal sender As 
         System.Object, ByVal e As System.EventArgs)
         
          ' Declare the local variables.
          Dim myCompCS As New CompCS.StringComponent
          Dim myCompVB As New CompVB.StringComponent
          Dim myCompVC As New CompVC.StringComponent

          Dim StringCount As Integer

          ' Clear the label. 
          Label1.Text = ""

          ' Display the results from the C# component.
          For StringCount = 0 To CInt(myCompCS.Count) - 1
            Label1.Text &= 
               MyCompCS.GetString(StringCount) & vbCrLf
          Next        
          Label1.Text &= vbCrLf

          ' Display the results from the Visual Basic component.
          For StringCount = 0 to CInt(MyCompVB.Count) - 1
              Label1.Text &= 
                 myCompVB.GetString(StringCount) & vbCrLf
          Next
          Label1.Text &= vbCrLf

          ' Display the results from the Visual C++ component.
          For StringCount = 0 To CInt(myCompVC.Count) - 1
              Label1.Text &= 
                 myCompVC.GetString(StringCount) & vbCrLf
          Next        
      End Sub
   End Class
End Module

.NET Framework SDK では、Windows フォーム ライブラリは System.Windows.Forms 名前空間にあります。次のステートメントは、System.Windows.Forms 名前空間をプログラムに組み込みます。

Imports System.Windows.Forms

名前空間をインポートすることによって、組み込まれた型 (Button など) を、System.Windows.Forms.Button などの完全限定名を使用せずに参照できるようになります。

次のコード行は、共通言語ランタイムの最も強力な機能の 1 つである継承を示しています。

Inherits Form

この 1 つのステートメントによって、クライアント クラスが Windows フォーム ライブラリ内の Form クラスからすべての機能を継承することが指定されます。特定の言語に依存しないという点、つまり、ランタイムからだけでなく、他の .NET 言語で書かれたクラスからも継承できるということは、ランタイムの継承モデルで重要な部分です。

続いて、フォームで使用するオブジェクトの型を次の行で示すように宣言します。

Private Button1 As System.Windows.Forms.Button

これで、コードを実行できる状態になりました。基本クラスのインスタンスを作成し、InitForm メソッドを呼び出す、Client フォームのコンストラクタを次に示します。

Sub New()
   MyBase.New
   ' InitForm is required by the Windows Forms Designer.
   InitForm
End Sub

Client フォームの新しいインスタンスを作成することから実行を開始する、プログラム自体のエントリ ポイントを次に示します。

Shared Sub Main()
   Application.Run(New Client)
End Sub

InitForm メソッドは、フォームとそのすべてのコントロールを設定します。たとえば、Button1 の場合、InitFormButton 型から新しいボタンを作成します。

Me.Button1 = New Button

次に、InitForm は作成したボタンを移動し、そのキャプション (または Text プロパティ) を設定し、そのサイズを変更します。

Button1.SetLocation(200, 248)
Button1.TabIndex = 1
Button1.Text = "&Close"
Button1.SetSize(75, 23)

その後に、Button 型の多くのイベントのうちの 1 つである Click をサンプルの独自のサブルーチンにリンクさせるという注意を要する部分が続きます。

AddHandler Button1.Click, New  
   System.EventHandler(AddressOf Me.Button1_Click)

最後に、InitForm はそのボタンをフォームの Controls コレクションに追加します。

Me.Controls.Add(Button1)

次のコードは、ユーザーが Button1 をクリックしたときに実行されるイベント ハンドラを示しています。

Private Sub Button1_Click(ByVal sender As System.Object, 
      ByVal e As System.EventArgs)
   Me.Close
End Sub

ここでの実際の動作は、フォームの Close メソッドが呼び出され、それによってアプリケーションが終了するだけです。この特別なサブルーチンは、引数を無視します。

このプログラムの核心部分は Button2_Click イベント ハンドラに含まれており、このイベント ハンドラは、Visual Basic クライアントの例で説明したコードと同じコードを使用します。ただし、Windows フォーム サンプルは、コンソールに書き込むのではなく、そのフォーム上のラベルの Text プロパティに出力を追加します。

Label1.Text &= 
   myCompVC.GetString(StringCount) & vbCrLf

ビルド プロセスは、明らかに複雑になります。既にビルドしたコンポーネントを指定するだけでなく、Windows フォームによって必要とされるすべてのアセンブリを参照する必要があります。

vbc.exe /t:winexe /debug+ /optionstrict+ 
   /reference:..\Bin\CompCS.dll 
   /reference:..\Bin\CompVB.dll 
   /reference:..\Bin\CompVC.dll 
   /reference:System.dll, 
   System.Windows.Forms.dll, 
   System.Data.DLL,system.drawing.dll 
   /out:..\bin\ClientWinForms.exe ClientWinForms.vb

アプリケーションを実行すると、次のダイアログ ボックスが作成されます。[Execute] ボタンをクリックすると、文字列はそのフォームのラベルに書き込まれます。

参照

ASP.NET を使用するクライアント | 開発チュートリアルのまとめ | 付録 A: 名前空間を検索するためのツール