Gestione dei Controlli Windows in C#

Nella scorsa lezione del corso sul linguaggio C# abbiamo introdotto la programmazione visuale con le winforms, tutto effettuato da codice. Ora, basterà cambiare il nome della nostra funzione Init in quella che l’ambiente di sviluppo si aspetta, InitializeComponent e fatta questa modifica al codice e salvato, la form potrà essere aperta per default in modalità visuale, ossia gestire la grandezza ed altre proprietà della finestra e dei controlli contenuti, completamente in maniera grafica.
Aggiungiamo alla nostra form un controllo etichetta ( label ), una casella combinata ( combobox ) ed un pulsante di comando ( command button ), servendoci della barra dei controlli standard e trascinandoli sulla nostra form. Per maggiori informazioni sui controlli di Windows potete fare riferimento a questo mio articolo, mentre per le proprietà di questi ultimi, potete studiarli o sull’aiuto in linea dell’ambiente di sviluppo oppure su qualche manuale dedicato al linguaggio C# ( anche se devo dire che potrebbero anche andare bene dei manuali sul VB.NET o addirittura su VC/C++, perché i controlli sono quasi gli stessi e con le stesse proprietà nei tre ambienti di sviluppo della Microsoft ). Il codice prodotto dopo l’aggiunta dei controlli è il seguente:

using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;

public class WinCorso : System.Windows.Forms.Form
{
   private Label lblMain;
   private ComboBox cmbMain;
   private Button btnMain;
   private Container cntMain = null;

   public WinCorso()
   {
         InitializeComponent();
   }

    protected override void Dispose(bool disposing)
   {
        if (disposing)
       {
              if (cntMain != null)
             {
                   cntMain.Dispose();
             }
        }
        base.Dispose(disposing);
   }

   private void InitializeComponent()
   {
         this.lblMain = new System.Windows.Forms.Label();
         this.cmbMain = new System.Windows.Forms.ComboBox();
         this.btnMain = new System.Windows.Forms.Button();
         this.SuspendLayout();

        // lblMain
        this.lblMain.AutoSize = true;
        this.lblMain.Location = new System.Drawing.Point(16, 25);
        this.lblMain.Name = "lblMain";
        this.lblMain.Size = new System.Drawing.Size(138, 13);
        this.lblMain.TabIndex = 0;
        this.lblMain.Text = "Scegliere l\'animale preferito:";

        // cmbMain
        this.cmbMain.FormattingEnabled = true;
        this.cmbMain.Items.AddRange(new object[] {
               "Cavallo",
               "Leone",
               "Scimmia",
               "Coccodrillo",
               "Elefante"});
        this.cmbMain.Location = new System.Drawing.Point(162, 23);
        this.cmbMain.Name = "cmbMain";
        this.cmbMain.Size = new System.Drawing.Size(240, 21);
        this.cmbMain.TabIndex = 1;

        // btnMain
        this.btnMain.Location = new System.Drawing.Point(138, 65);
        this.btnMain.Name = "btnMain";
        this.btnMain.Size = new System.Drawing.Size(162, 32);
        this.btnMain.TabIndex = 2;
        this.btnMain.Text = "Ho Scelto";
        this.btnMain.UseVisualStyleBackColor = true;

        // WinCorso
        this.ClientSize = new System.Drawing.Size(430, 122);
        this.Controls.Add(this.btnMain);
        this.Controls.Add(this.cmbMain);
        this.Controls.Add(this.lblMain);
        this.Name = "WinCorso";
        this.Text = "Corso di Windows";
        this.ResumeLayout(false);
        this.PerformLayout();
  }

  [STAThread]
  static void Main()
  {
      Application.Run(new WinCorso());
  }
}

Come potete notare era possibile anche fare tutto tramite codice sorgente, ma il tempo di sviluppo sarebbe stato certamente maggiore. Da notare che i valori nella casella combinata vengono inseriti negli items, che sono la lista dei singoli valori e che sono gestiti tramite le collections, così come per quelli delle liste ed in tutti quei controlli che possiedono gli items. Da dire che i valori possono essere un elenco statico, ma anche provenienti da un database, l’ambiente di sviluppo è perfettamente in grado di fare tutto graficamente ed in maniera semplicissima. Ovviamente dovete però conoscere il codice, affinché se doveste apportare delle piccole modifiche saprete dove mettere le mani, questo è il vero mio intento, insegnarvi a saper capire il codice creato dall’ambiente di sviluppo. Notate ancora che nella funzione InitializeComponent vengono istanziati i controlli, applicate le proprietà ed infine aggiunti all’insieme dei controlli della finestra. Nella prossima lezione termineremo questo esercizio trattando i delegati e gli eventi.

<< Lezione Precedente – Inizio CorsoIndice LezioniLezione Successiva >>

Di Giampaolo Rossi

Sviluppatore software da oltre 16 anni.