Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Bei allen bisher beschriebenen Beispielen handelt es sich um Befehlszeilenprogramme, die Daten in die Systemkonsole geschrieben haben. Jetzt kennen Sie den gesamten Entwicklungsprozess und können somit die Clientanwendung neu schreiben, um die neue Windows Forms-Bibliothek zu verwenden, die in allen .NET-Sprachen verfügbar ist. Im Beispiel wird Visual Basic verwendet, und dies ist die vollständige Quellcodeauflistung:
Auflistung 1. Windows Forms-Client in Visual Basic (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
In .NET Framework SDK befindet sich die Windows Forms-Bibliothek im System.Windows.Forms-Namespace. Die folgende Anweisung schließt den System.Windows.Forms-Namespace in das Programm ein.
Imports System.Windows.Forms
Indem Sie die Namespaces importieren, können Sie auf eingeschlossene Typen verweisen (z. B. Button), ohne den voll gekennzeichneten Typnamen (z. B. System.Windows.Forms.Button) verwenden zu müssen.
Anhand der folgenden Codezeile wird die Vererbung dargestellt, eines der leistungsstärksten Features der Common Language Runtime:
Inherits Form
Mit dieser einen Anweisung geben Sie an, dass die Clientklasse alle Funktionen von der Form-Klasse in der Windows Forms-Bibliothek erbt. Die Sprachenunabhängigkeit ist ein wichtiger Aspekt des Vererbungsmodells der Laufzeit. Die Vererbung erfolgt nicht nur von der Laufzeit, sondern auch von Klassen, die in einer beliebigen .NET-Sprache geschrieben wurden.
Anschließend deklarieren Sie die Objekttypen, die Sie im Formular verwenden, wie in der folgenden Zeile demonstriert:
Private Button1 As System.Windows.Forms.Button
Jetzt können Sie endlich Code ausführen. Dies ist der Konstruktor für das Client-Formular, das eine Instanz der Basisklasse erstellt und die InitForm-Methode aufruft:
Sub New()
MyBase.New
' InitForm is required by the Windows Forms Designer.
InitForm
End Sub
Dies ist der Einsprungpunkt für das Programm selbst, der den gesamten Prozess startet, indem er eine neue Instanz des Client-Formulars erstellt:
Shared Sub Main()
Application.Run(New Client)
End Sub
Die InitForm-Methode richtet das Formular und alle dazugehörigen Steuerelemente ein. Für Button1 erstellt InitForm beispielsweise eine neue Schaltfläche vom Typ Button:
Me.Button1 = New Button
InitForm verschiebt sie, legt die Beschriftung (oder Text-Eigenschaft) fest und ändert die Größe:
Button1.SetLocation(200, 248)
Button1.TabIndex = 1
Button1.Text = "&Close"
Button1.SetSize(75, 23)
Anschließend kommt der schwierige Teil: das Verbinden von Click, das lediglich eines der vielen Ereignisse des Typs Button ist, mit der Unterroutine des Beispiels:
AddHandler Button1.Click, New
System.EventHandler(AddressOf Me.Button1_Click)
Schließlich fügt InitForm die Schaltfläche der Controls-Auflistung des Formulars hinzu:
Me.Controls.Add(Button1)
Der folgende Code hebt den Ereignishandler hervor, der ausgeführt wird, wenn der Benutzer auf Button1 klickt:
Private Sub Button1_Click(ByVal sender As System.Object,
ByVal e As System.EventArgs)
Me.Close
End Sub
Hier wird lediglich die Close-Methode des Formulars aufgerufen, wodurch die Anwendung beendet wird. Diese Unterroutine ignoriert die Argumente.
Der entscheidende Inhalt des Programms befindet sich im Button2_Click-Ereignishandler, der denselben Code verwendet, der im Visual Basic-Clientbeispiel verwendet wurde. Das Windows Forms-Beispiel schreibt nicht in die Konsole, sondern in die Text-Eigenschaft der Marke im Formular:
Label1.Text &=
myCompVC.GetString(StringCount) & vbCrLf
Der Buildprozess ist definitiv komplexer. Sie müssen nicht nur die Komponenten angeben, die Sie bereits erstellt haben, sondern auch auf alle Assemblies verweisen, die für Windows Forms benötigt werden:
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
Wenn die Anwendung ausgeführt wird, wird folgendes Dialogfeld erstellt. Wenn auf die Schaltfläche Execute geklickt wird, werden die Zeichenfolgen in die Marke des Formulars geschrieben:
.gif)
Siehe auch
Ein ASP.NET verwendender Client | Zusammenfassung des Lernprogramms für Entwicklung | Anhang A: Tools zum Durchsuchen von Namespaces