Question
Problème de désélection sur une \"CheckedListbox\"
- Guillaume
- Auteur du sujet
- Hors Ligne
- Membre premium
-
Réduire
Plus d'informations
- Messages : 116
- Remerciements reçus 0
il y a 10 ans 2 mois #21597
par Guillaume
Bonjour à tous,
Je tente d'écrire un programme utilisant une GUI où je dois sélectionner une ou plusieurs agences. Le fait de sélectionner une agence active le bouton \"OK\". Le principe est que si plus aucune agence n'est sélectionnée, le bouton \"OK\" doit se désactiver. Du coup, je me base sur la propriété \"SelectedItem\" à chaque changement de sélection.
La variable est $Liste_Agence :
- Si je quitte de suite et que je regarde les propriétés de cette variable, rien n'est rempli au niveau de la propriété \"SelectedItem\" évidemment.
- Si je sélectionne une agence ou plusieurs agences et que je valide, \"SelectedItem\" contient les valeurs sélectionnées et le bouton \"OK\" s'active, là aussi, tout est normal.
- Si en revanche, je sélectionne une agence et que je la désélectionne, le bouton \"OK\" ne se désactive pas. Quand je regarde la propriété \"SelectedItem\", elle contient toujours le dernier nom décoché (et la propriété \"SelectedIndex\" ne revient donc jamais à l'état \"-1\" qui est l'état pour que le bouton \"OK\" soit décoché).
Comme on peut le voir sur l'image, la case \"Lyon\" est décochée mais toujours surlignée et quand on quitte ou que l'on valide, les valeurs \"SelectedItem\" et \"SelectedIndex\" correspondent à celles de \"Lyon\".
Voici le code :
[code:1]# AJOUT CLASSE .NET FRAMEWORK
Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing
#====================
# 1 - FORMULAIRE
#====================
#====================
# 1.1 - CADRE
#====================
# CADRE GENERAL
$Cadre = New-Object System.Windows.Forms.Form
$Cadre.ControlBox = $True
$Cadre.Text = \"Copie de fichiers vers partages\"
$Cadre.Size = New-Object System.Drawing.Size(540,700)
$Cadre.StartPosition = \"CenterScreen\"
$Cadre.Icon = [system.drawing.icon]::ExtractAssociatedIcon($PSHOME + \"\powershell.exe\"«»)
$Cadre.Topmost = $True
#====================
# 1.2 - BOUTONS
#====================
# BOUTON \"CREER\"
$Bouton_OK = New-Object System.Windows.Forms.Button
$Bouton_OK.Location = New-Object System.Drawing.Point(300,505)
$Bouton_OK.Size = New-Object System.Drawing.Size(160,40)
$Bouton_OK.Font = New-Object System.Drawing.Font(\"Microsoft Sans Serif\",10,[System.Drawing.FontStyle]::Bold)
$Bouton_OK.ForeColor = 'Green'
$Bouton_OK.Text = \"Lancer la copie\"
$Bouton_OK.Enabled = $False
$Bouton_OK.DialogResult = [System.Windows.Forms.DialogResult]::OK
$Cadre.AcceptButton = $Bouton_OK
$Cadre.Controls.Add($Bouton_OK)
# BOUTON \"ANNULER\"
$Bouton_Annuler = New-Object System.Windows.Forms.Button
$Bouton_Annuler.Location = New-Object System.Drawing.Point(300,575)
$Bouton_Annuler.Size = New-Object System.Drawing.Size(160,40)
$Bouton_Annuler.Font = New-Object System.Drawing.Font(\"Microsoft Sans Serif\",10,[System.Drawing.FontStyle]::Regular)
$Bouton_Annuler.ForeColor = 'Red'
$Bouton_Annuler.Text = \"Quitter\"
$Bouton_Annuler.DialogResult = [System.Windows.Forms.DialogResult]::Cancel
$Cadre.CancelButton = $Bouton_Annuler
$Cadre.Controls.Add($Bouton_Annuler)
#====================
# 1.3 - CHAMPS
#====================
# CHAMP AGENCES
$Titre_Agence = New-Object System.Windows.Forms.Label
$Titre_Agence.Location = New-Object System.Drawing.Point(105,10)
$Titre_Agence.Size = New-Object System.Drawing.Size(80,20)
$Titre_Agence.Text = \"Agences\"
$Titre_Agence.Font = New-Object System.Drawing.Font(\"Microsoft Sans Serif\",10,[System.Drawing.FontStyle]::Regular)
$Cadre.Controls.Add($Titre_Agence)
$Liste_Agence = New-Object System.Windows.Forms.CheckedListBox
$Liste_Agence.Location = New-Object System.Drawing.Point(60,40)
$Liste_Agence.Size = New-Object System.Drawing.Size(160,580)
$Liste_Agence.CheckOnClick = $True
$Liste_Agence.SelectionMode = \"One\"
$Cadre.Controls.Add($Liste_Agence)
[void] $Liste_Agence.Items.Add(\"Sélectionner tout\"«»)
[void] $Liste_Agence.Items.Add(\"Ajaccio\"«»)
[void] $Liste_Agence.Items.Add(\"Amiens\"«»)
[void] $Liste_Agence.Items.Add(\"Annecy\"«»)
[void] $Liste_Agence.Items.Add(\"Avignon\"«»)
[void] $Liste_Agence.Items.Add(\"Bastia\"«»)
[void] $Liste_Agence.Items.Add(\"Bayonne\"«»)
[void] $Liste_Agence.Items.Add(\"Belfort\"«»)
[void] $Liste_Agence.Items.Add(\"Bordeaux\"«»)
[void] $Liste_Agence.Items.Add(\"Bourges\"«»)
[void] $Liste_Agence.Items.Add(\"Brest\"«»)
[void] $Liste_Agence.Items.Add(\"Caen\"«»)
[void] $Liste_Agence.Items.Add(\"Calais\"«»)
[void] $Liste_Agence.Items.Add(\"Clermont-Ferrand\"«»)
[void] $Liste_Agence.Items.Add(\"Dijon\"«»)
[void] $Liste_Agence.Items.Add(\"Gennevilliers\"«»)
[void] $Liste_Agence.Items.Add(\"Grenoble\"«»)
[void] $Liste_Agence.Items.Add(\"La Rochelle\"«»)
[void] $Liste_Agence.Items.Add(\"Lille\"«»)
[void] $Liste_Agence.Items.Add(\"Lyon\"«»)
[void] $Liste_Agence.Items.Add(\"Marseille\"«»)
# SELECTIONNER TOUT / DESELECTIONNER TOUT
$Liste_Agence.Add_click({
If($This.selecteditem -eq 'Sélectionner tout'){
If ($This.GetItemCheckState(0) -ne 'Checked') {
For($i=1;$i -lt $Liste_Agence.Items.Count; $i++){
$Liste_Agence.SetItemChecked($i,$true)
} }
Else {
For($i=1;$i -lt $Liste_Agence.Items.Count; $i++){
$Liste_Agence.SetItemChecked($i,$False) }
}
}
})
# CONDITIONS FORMULAIRE OK
$Liste_Agence.Add_SelectedIndexChanged({ Validation_formulaire })
# FONCTION VALIDATION FORMULAIRE
Function Validation_formulaire
{
$Bouton_OK.Enabled = $Liste_Agence.SelectedIndex -ne -1 }
# AFFICHAGE GENERAL
[void]$Cadre.ShowDialog()
[void]$Cadre.Add_Shown({$Cadre.Activate()})[/code:1]
J'ai fait pas mal de recherches mais je n'arrive pas à trouver de solution à mon problème. J'espère que j'ai bien expliqué mon problème.
Je vous remercie par avance.
Guillaume
Je tente d'écrire un programme utilisant une GUI où je dois sélectionner une ou plusieurs agences. Le fait de sélectionner une agence active le bouton \"OK\". Le principe est que si plus aucune agence n'est sélectionnée, le bouton \"OK\" doit se désactiver. Du coup, je me base sur la propriété \"SelectedItem\" à chaque changement de sélection.
La variable est $Liste_Agence :
- Si je quitte de suite et que je regarde les propriétés de cette variable, rien n'est rempli au niveau de la propriété \"SelectedItem\" évidemment.
- Si je sélectionne une agence ou plusieurs agences et que je valide, \"SelectedItem\" contient les valeurs sélectionnées et le bouton \"OK\" s'active, là aussi, tout est normal.
- Si en revanche, je sélectionne une agence et que je la désélectionne, le bouton \"OK\" ne se désactive pas. Quand je regarde la propriété \"SelectedItem\", elle contient toujours le dernier nom décoché (et la propriété \"SelectedIndex\" ne revient donc jamais à l'état \"-1\" qui est l'état pour que le bouton \"OK\" soit décoché).
Comme on peut le voir sur l'image, la case \"Lyon\" est décochée mais toujours surlignée et quand on quitte ou que l'on valide, les valeurs \"SelectedItem\" et \"SelectedIndex\" correspondent à celles de \"Lyon\".
Voici le code :
[code:1]# AJOUT CLASSE .NET FRAMEWORK
Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing
#====================
# 1 - FORMULAIRE
#====================
#====================
# 1.1 - CADRE
#====================
# CADRE GENERAL
$Cadre = New-Object System.Windows.Forms.Form
$Cadre.ControlBox = $True
$Cadre.Text = \"Copie de fichiers vers partages\"
$Cadre.Size = New-Object System.Drawing.Size(540,700)
$Cadre.StartPosition = \"CenterScreen\"
$Cadre.Icon = [system.drawing.icon]::ExtractAssociatedIcon($PSHOME + \"\powershell.exe\"«»)
$Cadre.Topmost = $True
#====================
# 1.2 - BOUTONS
#====================
# BOUTON \"CREER\"
$Bouton_OK = New-Object System.Windows.Forms.Button
$Bouton_OK.Location = New-Object System.Drawing.Point(300,505)
$Bouton_OK.Size = New-Object System.Drawing.Size(160,40)
$Bouton_OK.Font = New-Object System.Drawing.Font(\"Microsoft Sans Serif\",10,[System.Drawing.FontStyle]::Bold)
$Bouton_OK.ForeColor = 'Green'
$Bouton_OK.Text = \"Lancer la copie\"
$Bouton_OK.Enabled = $False
$Bouton_OK.DialogResult = [System.Windows.Forms.DialogResult]::OK
$Cadre.AcceptButton = $Bouton_OK
$Cadre.Controls.Add($Bouton_OK)
# BOUTON \"ANNULER\"
$Bouton_Annuler = New-Object System.Windows.Forms.Button
$Bouton_Annuler.Location = New-Object System.Drawing.Point(300,575)
$Bouton_Annuler.Size = New-Object System.Drawing.Size(160,40)
$Bouton_Annuler.Font = New-Object System.Drawing.Font(\"Microsoft Sans Serif\",10,[System.Drawing.FontStyle]::Regular)
$Bouton_Annuler.ForeColor = 'Red'
$Bouton_Annuler.Text = \"Quitter\"
$Bouton_Annuler.DialogResult = [System.Windows.Forms.DialogResult]::Cancel
$Cadre.CancelButton = $Bouton_Annuler
$Cadre.Controls.Add($Bouton_Annuler)
#====================
# 1.3 - CHAMPS
#====================
# CHAMP AGENCES
$Titre_Agence = New-Object System.Windows.Forms.Label
$Titre_Agence.Location = New-Object System.Drawing.Point(105,10)
$Titre_Agence.Size = New-Object System.Drawing.Size(80,20)
$Titre_Agence.Text = \"Agences\"
$Titre_Agence.Font = New-Object System.Drawing.Font(\"Microsoft Sans Serif\",10,[System.Drawing.FontStyle]::Regular)
$Cadre.Controls.Add($Titre_Agence)
$Liste_Agence = New-Object System.Windows.Forms.CheckedListBox
$Liste_Agence.Location = New-Object System.Drawing.Point(60,40)
$Liste_Agence.Size = New-Object System.Drawing.Size(160,580)
$Liste_Agence.CheckOnClick = $True
$Liste_Agence.SelectionMode = \"One\"
$Cadre.Controls.Add($Liste_Agence)
[void] $Liste_Agence.Items.Add(\"Sélectionner tout\"«»)
[void] $Liste_Agence.Items.Add(\"Ajaccio\"«»)
[void] $Liste_Agence.Items.Add(\"Amiens\"«»)
[void] $Liste_Agence.Items.Add(\"Annecy\"«»)
[void] $Liste_Agence.Items.Add(\"Avignon\"«»)
[void] $Liste_Agence.Items.Add(\"Bastia\"«»)
[void] $Liste_Agence.Items.Add(\"Bayonne\"«»)
[void] $Liste_Agence.Items.Add(\"Belfort\"«»)
[void] $Liste_Agence.Items.Add(\"Bordeaux\"«»)
[void] $Liste_Agence.Items.Add(\"Bourges\"«»)
[void] $Liste_Agence.Items.Add(\"Brest\"«»)
[void] $Liste_Agence.Items.Add(\"Caen\"«»)
[void] $Liste_Agence.Items.Add(\"Calais\"«»)
[void] $Liste_Agence.Items.Add(\"Clermont-Ferrand\"«»)
[void] $Liste_Agence.Items.Add(\"Dijon\"«»)
[void] $Liste_Agence.Items.Add(\"Gennevilliers\"«»)
[void] $Liste_Agence.Items.Add(\"Grenoble\"«»)
[void] $Liste_Agence.Items.Add(\"La Rochelle\"«»)
[void] $Liste_Agence.Items.Add(\"Lille\"«»)
[void] $Liste_Agence.Items.Add(\"Lyon\"«»)
[void] $Liste_Agence.Items.Add(\"Marseille\"«»)
# SELECTIONNER TOUT / DESELECTIONNER TOUT
$Liste_Agence.Add_click({
If($This.selecteditem -eq 'Sélectionner tout'){
If ($This.GetItemCheckState(0) -ne 'Checked') {
For($i=1;$i -lt $Liste_Agence.Items.Count; $i++){
$Liste_Agence.SetItemChecked($i,$true)
} }
Else {
For($i=1;$i -lt $Liste_Agence.Items.Count; $i++){
$Liste_Agence.SetItemChecked($i,$False) }
}
}
})
# CONDITIONS FORMULAIRE OK
$Liste_Agence.Add_SelectedIndexChanged({ Validation_formulaire })
# FONCTION VALIDATION FORMULAIRE
Function Validation_formulaire
{
$Bouton_OK.Enabled = $Liste_Agence.SelectedIndex -ne -1 }
# AFFICHAGE GENERAL
[void]$Cadre.ShowDialog()
[void]$Cadre.Add_Shown({$Cadre.Activate()})[/code:1]
J'ai fait pas mal de recherches mais je n'arrive pas à trouver de solution à mon problème. J'espère que j'ai bien expliqué mon problème.
Je vous remercie par avance.
Guillaume
Connexion ou Créer un compte pour participer à la conversation.
- xyz
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 69
il y a 10 ans 2 mois #21598
par xyz
Tutoriels PowerShell
Réponse de xyz sur le sujet Re:Problème de désélection sur une \"CheckedListbox\"
Ce comportement me semble normal, le problème se situe entre le clavier et le siège 
Un item peut être selected et checked ou pas.
La collection $Liste_Agence.CheckedItems est peut être plus approprié pour ton traitement.
En passant :
[code:1][void] $Liste_Agence.Items.Add(\"Sélectionner tout\"«»)[/code:1]
doit être remplacé par un menu contextuel.
Un item peut être selected et checked ou pas.
La collection $Liste_Agence.CheckedItems est peut être plus approprié pour ton traitement.
En passant :
[code:1][void] $Liste_Agence.Items.Add(\"Sélectionner tout\"«»)[/code:1]
doit être remplacé par un menu contextuel.
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Guillaume
- Auteur du sujet
- Hors Ligne
- Membre premium
-
Réduire
Plus d'informations
- Messages : 116
- Remerciements reçus 0
il y a 10 ans 2 mois #21601
par Guillaume
Réponse de Guillaume sur le sujet Re:Problème de désélection sur une \"CheckedListbox\"
Effectivement, ça marche beaucoup mieux ! Je n'ai pas encore toutes les notions...
Et pour cette même raison : je ne vois pas bien ce qu'est un menu contextuel. Qu'est-ce que cela va changer (à priori, cette fonctionnalité est opérationnelle en l'état) ? Et comment la mettre en place ?
Merci beaucoup.
Et pour cette même raison : je ne vois pas bien ce qu'est un menu contextuel. Qu'est-ce que cela va changer (à priori, cette fonctionnalité est opérationnelle en l'état) ? Et comment la mettre en place ?
Merci beaucoup.
Connexion ou Créer un compte pour participer à la conversation.
- xyz
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 69
il y a 10 ans 2 mois #21602
par xyz
Tutoriels PowerShell
Réponse de xyz sur le sujet Re:Problème de désélection sur une
Guillaume_F écrit:
Je te joins une démo autour du composant System.Windows.Forms.ContextMenuStrip
Ici il s'agit plus de connaissances que des compétences.Je n'ai pas encore toutes les notions...
Je te joins une démo autour du composant System.Windows.Forms.ContextMenuStrip
La pièce jointe v2_1_PSh.zip est absente ou indisponible
Tutoriels PowerShell
Pièces jointes :
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.042 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- Problème de désélection sur une "CheckedListbox"