Partager via


Client Windows utilisant Windows Forms

Tous les exemples précédents sont des programmes de ligne de commande qui écrivent des chaînes dans la console du système. Maintenant que vous avez vu tout le processus de développement, vous allez réécrire votre application cliente pour utiliser la nouvelle bibliothèque Windows Forms, disponible pour tous les langages .NET. L'exemple utilise Visual Basic et voici la liste de code source complète :

Listing 1. Client Windows Forms dans 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

Dans le Kit de développement .NET Framework SDK, la bibliothèque Windows Forms se trouve dans l'espace de noms System.Windows.Forms. L'instruction suivante incorpore l'espace de noms System.Windows.Forms dans le programme.

Imports System.Windows.Forms

En important les espaces de noms, vous pouvez vous référer aux types inclus, tels que Button, sans avoir à utiliser le nom de type qualifié complet, tel que System.Windows.Forms.Button.

La ligne de code suivante est intéressante ; elle illustre l'héritage, l'une des fonctionnalités les plus puissantes du Common Language Runtime :

Inherits Form

Avec cette seule instruction, vous spécifiez que la classe du client hérite de toutes les fonctionnalités de la classe Form dans la bibliothèque Windows Forms. L'indépendance de langage est un aspect important du modèle d'héritage du runtime : vous pouvez hériter du runtime, mais également des classes écrites dans n'importe quel langage .NET.

Ensuite, vous déclarez les types d'objet que vous utiliserez dans votre formulaire, comme l'illustre la ligne suivante :

Private Button1 As System.Windows.Forms.Button

Vous êtes maintenant prêt à exécuter du code. Voici le constructeur pour le formulaire Client qui crée une instance de la classe de base et appelle la méthode **InitForm **:

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

Voici le point d'entrée pour le programme lui-même qui démarre en créant une nouvelle instance du formulaire Client :

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

La méthode InitForm configure le formulaire et tous ses contrôles. Pour Button1, par exemple, InitForm crée un nouveau bouton à partir du type Button :

Me.Button1 = New Button

Puis, InitForm le déplace, définit sa légende (ou sa propriété Text) et le redimensionne :

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

Puis vient la partie délicate : connecter Click, qui est simplement l'un des nombreux événements du type Button, à la propre sous-routine de l'exemple :

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

Enfin, InitForm ajoute le bouton à la collection Controls du formulaire :

Me.Controls.Add(Button1)

Le code suivant met en valeur le gestionnaire d'événements qui s'exécute lorsque l'utilisateur clique sur **Button1 **:

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

En fait, la seule chose qui se produit ici est l'appel de la méthode Close du formulaire, fermant ainsi l'application. Cette sous-routine particulière ignore les arguments.

L'élément essentiel du programme se trouve dans le gestionnaire d'événements Button2_Click, qui utilise le même code que celui de l'exemple du client Visual Basic. Au lieu d'écrire dans la console, toutefois, l'exemple de Windows Forms ajoute le code à la propriété Text de l'étiquette sur le formulaire :

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

Le processus de création est réellement plus complexe. Vous devez non seulement spécifier les composants que vous avez déjà créés mais également référencer tous les assemblys requis par Windows Forms :

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

L'exécution de l'application crée la boîte de dialogue suivante. Lorsque vous cliquez sur le bouton Execute, les chaînes sont écrites dans l'étiquette sur le formulaire :

Voir aussi

Client utilisant ASP.NET | Résumé du didacticiel de développement | Annexe A : Outils pour l'exploration des espaces de noms