Question selection plusieurs items combobox

Plus d'informations
il y a 8 ans 1 mois #24939 par flavien
Bonjour,

J'ai un soucis pour ajouter des items d'une combobox vers une autre combobox. Lorsque j'utilise le bouton ajouter et que j'ai selectionner plusieurs contenus da ma combobox seul le premier élement s'ajoute.

Par contre lorsque je supprime plusieurs élement via le bouton supprimer cela fonctionne.

ps: C'est le canvas sauvegarde.

[code:1]Add-Type -AssemblyName PresentationFramework, PresentationCore, WindowsBase

[xml]$XAML =@'

<Window
xmlns=\"schemas.microsoft.com/winfx/2006/xaml/presentation\";
xmlns:«»x=\"schemas.microsoft.com/winfx/2006/xaml\";
Title=\"Sauvegarde User Beta 1.0\" Height=\"500\" Width=\"700\">
<Grid Visibility=\"Visible\">
<Canvas Height=\"255\" HorizontalAlignment=\"Right\" Margin=\"0,108,159,0\" Name=\"canvas_Menu\" VerticalAlignment=\"Top\" Width=\"374\" Visibility=\"Visible\">
<Button Canvas.Left=\"62\" Canvas.Top=\"44\" Content=\"Sauvegarde\" Height=\"36\" Name=\"BTN_SAUVEGARDE_1\" Width=\"236\" />
<Button Canvas.Left=\"62\" Canvas.Top=\"100\" Content=\"Restauration\" Height=\"36\" Name=\"BTN_RESTAURATION_1\" Width=\"236\" />
<Button Canvas.Left=\"62\" Canvas.Top=\"156\" Content=\"Custom\" Height=\"36\" Name=\"BTN_CUSTOM_1\" Width=\"236\" />
<Button Canvas.Left=\"62\" Canvas.Top=\"212\" Content=\"Quitter\" Height=\"36\" Name=\"BTN_QUITTER_1\" Width=\"236\" />
<Label Canvas.Left=\"62\" Canvas.Top=\"0\" Content=\"Menu\" Height=\"37\" Name=\"LBL_MENU_1\" Width=\"236\" FontWeight=\"Bold\" FontStyle=\"Normal\" HorizontalContentAlignment=\"Center\" VerticalContentAlignment=\"Center\" FontSize=\"18\" />
</Canvas>
<Canvas Name=\"canvas_Sauvegarde\" Visibility=\"Hidden\">
<Button Canvas.Left=\"267\" Canvas.Top=\"111\" Content=\"Supprimer\" Height=\"22\" Name=\"BTN_SUPPRIMER_SAVE_1\" Width=\"96\" />
<ListBox Canvas.Left=\"387\" Canvas.Top=\"58\" Height=\"85\" Name=\"TXT_PATHASAVE_1\" Width=\"287\" />
<ListBox Canvas.Left=\"6\" Canvas.Top=\"58\" Height=\"85\" Name=\"LB_PATHASAVE_1\" Width=\"239\" />
<Label Canvas.Left=\"6\" Canvas.Top=\"32\" Content=\"Selection des dossiers\" Height=\"28\" Name=\"LBL_SELECTION1_SAVE\" Width=\"248\" />
<Button Canvas.Left=\"267\" Canvas.Top=\"69\" Content=\"Ajouter\" Height=\"22\" Name=\"BTN_AJOUTER_SAVE_1\" Width=\"96\" />
<Label Canvas.Left=\"126\" Canvas.Top=\"-4\" Content=\"SAUVEGARDE\" Height=\"40\" Name=\"LBL_SAUVEGARDE_1\" Width=\"403\" FontSize=\"22\" FontWeight=\"Bold\" HorizontalContentAlignment=\"Center\" />
<Label Canvas.Left=\"387\" Canvas.Top=\"32\" Content=\"Dossiers selectionnés\" Height=\"28\" Name=\"LBL_SELECTION2_SAVE\" Width=\"248\" />
<Label Canvas.Left=\"6\" Canvas.Top=\"160\" Content=\"Chemin sauvegarde\" Height=\"28\" Name=\"LBL_CHEMIN1_SAVE\" Width=\"248\" />
<ListBox Canvas.Left=\"9\" Canvas.Top=\"183\" Height=\"26\" Name=\"LB_PATHASAVE_3\" Width=\"558\" />
<Button Canvas.Left=\"450\" Canvas.Top=\"403\" Content=\"Precedent\" Height=\"22\" Name=\"BTN_PRECEDENT_SAVE_1\" Width=\"96\" />
<Button Canvas.Left=\"569\" Canvas.Top=\"403\" Content=\"Quitter\" Height=\"22\" Name=\"BTN_QUITTER_SAVE_1\" Width=\"96\" />
</Canvas>
</Grid>
</Window>
'@

$reader = New-Object System.Xml.XmlNodeReader $XAML
$Form = [Windows.Markup.XamlReader]::Load($reader)

#region interface page menu
$btn_quitter1 = $form.findname('BTN_QUITTER_1')
$btn_quitter1.add_click({ $Form.close() })


#endregion


#region interface page sauvegarde
$btn_supprimer1 = $Form.FindName('BTN_SUPPRIMER_SAVE_1')
$btn_sauvegarde1 = $form.findname('BTN_SAUVEGARDE_1')
$Btn_precedent = $form.findname('BTN_PRECEDENT_SAVE_1')
$Btn_quitter_save = $form.findname('BTN_QUITTER_SAVE_1')
$canvas_Menu = $form.findname('canvas_Menu')
$canvas_Sauvegarde = $form.findname('canvas_Sauvegarde')
$lb_path1 = $form.findname('LB_PATHASAVE_1')
$btn_ajouter1 = $form.findname('BTN_AJOUTER_SAVE_1')
$lb_path2 = $form.findname('TXT_PATHASAVE_1')



#region test

$bureau = '%USERPROFILE%\Desktop'

$lb_path1.SelectionMode = \"Extended\"
$lb_path2.SelectionMode = \"Extended\"

[void]$lb_path1.Items.Add(\"Bureau\"«»)
[void]$lb_path1.Items.Add(\"Favoris\"«»)
[void]$lb_path1.Items.Add(\"Mes Documents\"«»)
[void]$lb_path1.Items.Add(\"Mes Images\"«»)
[void]$lb_path1.Items.Add(\"Test1\"«»)
[void]$lb_path1.Items.Add(\"Test2\"«»)
[void]$lb_path1.Items.Add(\"Test3\"«»)



#endregion


$btn_ajouter1.add_click({
$lb_path2.items.Add($lb_path1.SelectedItem)

})

$btn_supprimer1.Add_Click({
While ($lb_path2.SelectedItems.count -gt 0) {
$lb_path2.Items.RemoveAt($lb_path2.SelectedIndex)
}
})


$btn_quitter_save.add_click({ $Form.close() })

$Btn_sauvegarde1.add_Click({
$Canvas_Menu.Visibility = \"Hidden\"
$Canvas_Sauvegarde.Visibility = \"visible\"
})

$Btn_precedent.add_Click({
$Canvas_Menu.Visibility = \"visible\"
$Canvas_Sauvegarde.Visibility = \"hidden\"
})

#endregion


$Form.showdialog() | Out-Null[/code:1]

Je pense que le problème se situe dans ces lignes.

[code:1]
$lb_path1.SelectionMode = \"Extended\"
$lb_path2.SelectionMode = \"Extended\"

$btn_ajouter1.add_click({
$lb_path2.items.Add($lb_path1.SelectedItem)
})
[/code:1]

Merci.

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 8 ans 1 mois #24944 par Philippe
salut flav631

il te faut utilisé SelectedItems avec le S à la fin dans une boucle :

[code:1]
$btn_ajouter1.add_click({
$lb_path1.SelectedItems | foreach {
$lb_path2.items.Add($_)
}
})[/code:1]

pour la multi selection tu peut aussi utlisé SelectionMode=\"Multiple\" comme ceci :
[code:1]<ListBox Canvas.Left=\"6\" Canvas.Top=\"58\" Height=\"85\" Name=\"LB_PATHASAVE_1\" Width=\"239\" SelectionMode=\"Multiple\" />[/code:1]
du coup tu n'a plus besoin de $lb_path1.SelectionMode = \"Extended\"
et la multi-select ce fait sans utilisé le clavier, c'est plus pratique !

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 8 ans 1 mois #24946 par flavien
Merci 6ratgus pour ton aide!

Autre petite question, j'aimerais améliorer la combobox pour qu'elle ne me propose plus de doublon si j'ajoute deux fois la même chose.

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 8 ans 1 mois #24949 par Philippe
flav631 écrit:

Autre petite question, j'aimerais améliorer la combobox pour qu'elle ne me propose plus de doublon si j'ajoute deux fois la même chose.

tu plusieurs solution suivant le type d'objet

la combobox te donne ce que tu lui a mis dedans :P
avant de mettre les éléments dans la combobox, tu pourrai vérifier qu'il soit pas déjà présent dans la fonction d'ajout \"$btn_ajouter1.add_click\"
avec \"if notcontains\" :
[code:1]$btn_ajouter1.add_click({
$lb_path1.SelectedItems | foreach {
if ($lb_path2.items -notcontains $_) {
$lb_path2.items.Add($_)
}
}
})
[/code:1]

ta demande à la récupération de la liste peut ce faire avec un select -unique :

$lb_path2.items | select -Unique


n'existe pas a venir posé tes questions si tu comprend pas quelque chose ;)
a bientôt et bon codage pour ton script

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 8 ans 1 mois #24956 par flavien
Merci pour tes réponses et tes explications. J'ai pu bien avancer. Par contre j'ai un soucis pour attribuer une variable à un item de ma combobox (exemple chemin de l'élement à sauvegarder).

Je ne vois pas trop comment faire. Dois-je faire une collection pour ma combobox et faire un filtre pour afficher la donnée que je désire dans la combobox et utilisé ma variable par la suite (entre autre pour la copie)?

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 8 ans 1 mois #24957 par flavien
J'ai trouver une solution, certainement pas la mieux.

[code:1]
$bureau = '%USERPROFILE%\Desktop'
$vtab1= [string]'Bureau', $bureau
[void]$lb_path1.Items.Add($vtab1[0])
[/code:1]

Il me reste donc à utiliser une fonction if pour la copie et je pense que ça fonctionnera.

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.052 secondes
Propulsé par Kunena