Gérer les checkbox et le "connecter"
Fermé
xGunner
Messages postés
29
Date d'inscription
lundi 30 octobre 2017
Statut
Membre
Dernière intervention
28 janvier 2022
-
1 août 2020 à 16:55
Utilisateur anonyme - 4 août 2020 à 14:56
Utilisateur anonyme - 4 août 2020 à 14:56
Bonjour,
Ça fait un moment que je n'avais pas mis les pied dans le C# du coup je bloque sur un élément de base qui ne me revient pas et mes recherches sur le web n'ont rien donné de concluant. Je compte donc sur votre aide =)
Voila, j'ai une checkBox1 qui si elle est décoché je veux décocher et griser la checkBox2
Et si la checkBox1 est coché réactiver la checkBox2 et la cocher en même temps
Voila c'est tout bête mais je ne trouve pas comment y arriver, merci d'avance pour votre aide
Ça fait un moment que je n'avais pas mis les pied dans le C# du coup je bloque sur un élément de base qui ne me revient pas et mes recherches sur le web n'ont rien donné de concluant. Je compte donc sur votre aide =)
Voila, j'ai une checkBox1 qui si elle est décoché je veux décocher et griser la checkBox2
Et si la checkBox1 est coché réactiver la checkBox2 et la cocher en même temps
Voila c'est tout bête mais je ne trouve pas comment y arriver, merci d'avance pour votre aide
A voir également:
- Gérer les checkbox et le "connecter"
- Se connecter à gmail sur téléphone - Guide
- Comment connecter chromecast à la télé - Guide
- Se connecter à ma boite hotmail - Guide
- Gerer les profils netflix - Guide
- Facebook se connecter à un autre compte - Guide
6 réponses
Utilisateur anonyme
1 août 2020 à 19:40
1 août 2020 à 19:40
Ce qui est incompréhensible c'est de faire du WPF sans savoir ce qu'est le binding.
Y'a pas un code XALM sur le net sans ce mot clé....
Et c'est normal puisque le WPF a été créé pour répondre aux pattern MVC et MVVM qui sont tous les 2 basés sur la liaison de données => binding.
Ensuite le code que tu montres ne fait rien au final.
Je vais juste ajouter des commentaires pour un cas.
Et c'est pareil pour toute tes variables, y compris opt_choco
Pour faire ce que tu souhaites, comme WPF est prévu, il faut commencer par écrire un objet dont le job sera de construire ton string et un objet qui écrit une ligne de ton string.
Tous deux implémentent InotifyPropertyChanged
Sur ma fenêtre, il y a un checkbox qui permet l'accès aux options (dans une listbox) et au bouton créé, le nombre d'options, les chekbox, les enabled etc... sont tous gérés par binding
Enfin le code behind de la fenêtre
PS le code c'est mieux en couleur non? Voir ici comment bien utiliser les balises sur le site https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
Y'a pas un code XALM sur le net sans ce mot clé....
Et c'est normal puisque le WPF a été créé pour répondre aux pattern MVC et MVVM qui sont tous les 2 basés sur la liaison de données => binding.
Ensuite le code que tu montres ne fait rien au final.
Je vais juste ajouter des commentaires pour un cas.
if (checkBox8.IsChecked == true) { string winrar = " winrar";//la variable winrar a pour portée le if dans lequel elle est initialisée } //la variable winrar n'existe plus ici
Et c'est pareil pour toute tes variables, y compris opt_choco
Pour faire ce que tu souhaites, comme WPF est prévu, il faut commencer par écrire un objet dont le job sera de construire ton string et un objet qui écrit une ligne de ton string.
Tous deux implémentent InotifyPropertyChanged
using System.ComponentModel; namespace Test_WPF { class OptionInstall : INotifyPropertyChanged { public OptionInstall(string LaCommande) { Commande = LaCommande; } private bool install = false; /// <summary> /// Retourne ou définit si cette option est installée /// </summary> public bool IsInstall { get { return install; } set { if (install != value) { install = value; GenerePropertyChanged("IsInstall"); } } } private string commande; /// <summary> /// Fragment de la commande à construire /// </summary> public string Commande { get { return commande; } set { if (commande != value) { commande = value; GenerePropertyChanged("Commande"); } } } /// <summary> /// ToString personnalisé construisant une commande par instance /// </summary> /// <returns></returns> public override string ToString() { return string.Format("choco install {0}", commande.ToLower()); } #region INotifyPropertyChanged public event PropertyChangedEventHandler PropertyChanged; private void GenerePropertyChanged(string Propriete) { if (this.PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs(Propriete)); } #endregion } }
using System; using System.Collections.ObjectModel; using System.ComponentModel; using System.Linq; namespace Test_WPF { class BatchCreator : INotifyPropertyChanged { private ObservableCollection<OptionInstall> options = new ObservableCollection<OptionInstall> { new OptionInstall("Winrar"), new OptionInstall("Firefox"), //etc tu ajoutes toutes tes options }; //collection permettant la construction du batch private bool choco = false; /// <summary> /// Retourne ou définit si la commande sera construite /// </summary> public bool Choco { get { return choco; } set { if (choco != value) { choco = value; GenerePropertyChanged("Choco"); if (choco == false)//dans la négative on désactive toutes les autres options foreach (OptionInstall o in options) if (o.IsInstall) { o.IsInstall = false; } } } } /// <summary> /// Retourne la liste d'options /// </summary> public ObservableCollection<OptionInstall> Options { get { return options; } } //etc pour chaque option /// <summary> /// Méthode servant à créer le batch /// </summary> /// <returns></returns> public string CreerBatch() { if (!choco) return string.Empty; var lignes = options.Where(o => o.IsInstall).Select(o => o.ToString()); return string.Join(Environment.NewLine, lignes); } #region INotifyPropertyChanged public event PropertyChangedEventHandler PropertyChanged; private void GenerePropertyChanged(string Propriete) { if (this.PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs(Propriete)); } #endregion } }
Sur ma fenêtre, il y a un checkbox qui permet l'accès aux options (dans une listbox) et au bouton créé, le nombre d'options, les chekbox, les enabled etc... sont tous gérés par binding
<Window x:Class="Test_WPF.Window1" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:Test_WPF" mc:Ignorable="d" Title="Window1" Height="450" Width="800"> <Grid> <CheckBox Content="Créer commandes" IsChecked="{Binding Choco}" Width="150" Height="20" Margin="321,44,321,355"/> <ListBox ItemsSource="{Binding Options}" Width="150" Height="280" IsEnabled="{Binding Choco}"> <ListBox.ItemTemplate> <DataTemplate> <CheckBox Content="{Binding Commande}" IsChecked="{Binding IsInstall}"/> </DataTemplate> </ListBox.ItemTemplate> </ListBox> <Button Content="Créer" IsEnabled="{Binding Choco}" HorizontalAlignment="Left" Margin="348,354,0,0" VerticalAlignment="Top" Width="75" Click="Button_Click"/> </Grid> </Window>
Enfin le code behind de la fenêtre
using System.Windows; namespace Test_WPF { /// <summary> /// Logique d'interaction pour Window1.xaml /// </summary> public partial class Window1 : Window { BatchCreator creator = new BatchCreator(); public Window1() { InitializeComponent(); this.DataContext = creator; //on binde la fenetre sur le créateur } private void Button_Click(object sender, RoutedEventArgs e) { string fichier = creator.CreerBatch(); } } }
PS le code c'est mieux en couleur non? Voir ici comment bien utiliser les balises sur le site https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
xGunner
Messages postés
29
Date d'inscription
lundi 30 octobre 2017
Statut
Membre
Dernière intervention
28 janvier 2022
Modifié le 3 août 2020 à 13:56
Modifié le 3 août 2020 à 13:56
Merci pour ta réponse plus que complète pourrais tu me donner un lien pour télécharger ton projet car j'ai du mal a voir ce que je dois mettre où ?
Je précise que je n'ai pas fait d'étude la dedans juste quelques programmes assez basiques en autodidacte c'est pourquoi il me manque certainement beaucoup de base dans ce langage
J’apprécie beaucoup ton investissement dans ta réponse
Je précise que je n'ai pas fait d'étude la dedans juste quelques programmes assez basiques en autodidacte c'est pourquoi il me manque certainement beaucoup de base dans ce langage
J’apprécie beaucoup ton investissement dans ta réponse
Utilisateur anonyme
3 août 2020 à 15:15
3 août 2020 à 15:15
Je t'ai donné le code complet d'une fenêtre donc télécharger le projet ne changerait pas grand chose.
Je suis autodidacte aussi, mais j'ai fait l'effort d'apprendre les bases....
Pour le C#
https://tahe.developpez.com/dotnet/csharp/
Et pour WPF
https://lite.qwant.com/?q=wpf+par+la+pratique+thomas+lebrun&client=opensearch
Je précise que je n'ai pas fait d'étude la dedans juste quelques programmes assez basiques en autodidacte c'est pourquoi il me manque certainement beaucoup de base dans ce langage
Je suis autodidacte aussi, mais j'ai fait l'effort d'apprendre les bases....
Pour le C#
https://tahe.developpez.com/dotnet/csharp/
Et pour WPF
https://lite.qwant.com/?q=wpf+par+la+pratique+thomas+lebrun&client=opensearch
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
xGunner
Messages postés
29
Date d'inscription
lundi 30 octobre 2017
Statut
Membre
Dernière intervention
28 janvier 2022
4 août 2020 à 12:56
4 août 2020 à 12:56
je n'arrive pas à faire fonctionner ton code, je ne sais pas exactement ce que je dois mettre où, c'est pour ça que j'aurais bien aimé télécharger le projet pour comprendre comment ça fonctionne
J'avais fait un cours sur le site du zéro à l'époque (openclassroom maintenant) mais j'avais 16-17 ans et je faisais ça après les cours donc je n'ai pas donné beaucoup d'importance à l'univers C#. On va dire que je cherchais seulement ce que je voulais faire sur le moment maintenant j'en ai 23 donc je me rappelle vaguement.
En tout cas merci pour ton aide, ce que tu me propose ici n'a rien à voir avec les fonctions plus que basique que j'utilisais à l'époque
J'avais fait un cours sur le site du zéro à l'époque (openclassroom maintenant) mais j'avais 16-17 ans et je faisais ça après les cours donc je n'ai pas donné beaucoup d'importance à l'univers C#. On va dire que je cherchais seulement ce que je voulais faire sur le moment maintenant j'en ai 23 donc je me rappelle vaguement.
En tout cas merci pour ton aide, ce que tu me propose ici n'a rien à voir avec les fonctions plus que basique que j'utilisais à l'époque
1 août 2020 à 17:45
1 août 2020 à 17:57
Étant donné que je ne vois pas de quoi tu parle j'imagine "à la main" ?
j'insère l'affreusité que je suis en train de créer (je cherche à taton complet dans une autre galaxie) :
En gros je veux insérer dans un string des bout de commande bat, ici il commence avec "choco install" pour donner si la checkBox8 est coché : "choco install winrar" (choco + winrar)
J'espère que c'est compréhensible =S