vendredi 30 novembre 2012

Les listes déroulantes.

Dans mon premier exemple, je retourne simplement la valeur affichée dans la ComboBox. Dans ce cas j'utilise ".Items.AddRange()" pour remplir facilement ma liste de choix :

 
#Ouvre une fenêtre.
[Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
$form = New-Object Windows.Forms.Form
$form.text = "Contrôles"            
$form.Size = New-Object System.Drawing.Size(200,200)


#Liste déroulante (ComboBox).
$liste1 = New-Object System.Windows.Forms.Combobox
$liste1.Location = New-Object Drawing.Point 20,20
$liste1.Size = New-Object System.Drawing.Size(150,30)
$liste1.DropDownStyle = "DropDownList"
$liste1.Items.AddRange(("1","2","3","4","5","6","7","8","9"))
$liste1.SelectedIndex = 0


#Attache le contrôle à la fenêtre
$form.controls.add($liste1)


#Affiche le tout.
$form.ShowDialog()


#Affiche la sélection.
Write-Host "ComboBox = " $liste1.Text


#Fin.

Dans ce nouvel exemple, je souhaite retourner une valeur différente de la valeur affichée. Pour réaliser cela, je vais utiliser une table de données (DataTable) et une vue (View). Le tableau que je vais utiliser dans cet exemple ressemble à cela :

Extension  Pays
.fr                 France
.es               Espagne
.jp                Japon

 
#Ouvre une fenêtre.
[Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
$form = New-Object Windows.Forms.Form
$form.text = "Contrôles"            
$form.Size = New-Object System.Drawing.Size(200,200)


#Création de la table de données (DataTable).
$table1 = New-Object system.Data.DataTable


#Définition des 2 colonnes (Nom, Type).
$colonne1 = New-Object system.Data.DataColumn Extension,([string])
$colonne2 = New-Object system.Data.DataColumn Pays,([string])


#Création des colonnes dans la table de données.
$table1.columns.add($colonne1)
$table1.columns.add($colonne2)


#Ajoute les données ligne par ligne dans la table de données.
$ligne = $table1.NewRow()   #Création de la nouvelle ligne.
$ligne.Extension = ".fr"    #Dans la colonne extension on met la valeur ".fr".
$ligne.Pays = "France"      #Dans la colonne pays on met la valeur "France".
$table1.Rows.Add($ligne)    #Ajoute la nouvelle ligne dans la table de données.
$ligne = $table1.NewRow()
$ligne.Extension = ".es"
$ligne.Pays = "Espagne"
$table1.Rows.Add($ligne)
$ligne = $table1.NewRow()
$ligne.Extension = ".jp"
$ligne.Pays = "Japon"
$table1.Rows.Add($ligne)


#Création de la vue.
$vu1 = New-Object System.Data.DataView($table1)
$vu1.Sort="Extension ASC"   #Tri la colonne "Extension" par ordre croissant.


#Création de la liste déroulante (ComboBox).
$liste1 = New-Object System.Windows.Forms.Combobox
$liste1.Location = New-Object Drawing.Point 20,20
$liste1.Size = New-Object System.Drawing.Size(150, 30)
$liste1.DropDownStyle = "DropDownList"


#Associe les données à la liste déroulante.
#Pour cela il faut créer un "Binding Context" sur le contrôle.
$liste1.BindingContext = New-Object System.Windows.Forms.BindingContext
$liste1.DataSource = $vu1         #Affecte la vue qui contient les données triées.
$liste1.DisplayMember = "Pays"    #Colonne qui sera affiché (Pays). 
$liste1.ValueMember = "Extension" #Colonne qui sera retourné (Extension).
$liste1.SelectedValue = ".Fr"     #Valeur par défaut.


#Attache le contrôle à la fenêtre.
$form.controls.add($liste1)


#Affiche le tout.
$form.ShowDialog()


#Affiche la sélection.
Write-Host "ComboBox = " $liste1.SelectedValue


#Fin.