Gérer les checkbox et le "connecter"

xGunner Messages postés 30 Statut Membre -  
 Utilisateur anonyme -
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

6 réponses

  1. Utilisateur anonyme
     
    Bonjour
    • Winform
    • WPF
    • ASP
    • Autre


    0
    1. Utilisateur anonyme
       
      Et aussi, tu utilises le binding ou tu t'embêtes à gérer les controles "à la main"?
      0
      1. xGunner Messages postés 30 Statut Membre > Utilisateur anonyme
         
        WPF
        É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) :

                    if (checkBox3.IsChecked == true)
        {
        string choco = "choco install";

        if (checkBox8.IsChecked == true)
        {
        string winrar = " winrar";
        }
        if (checkBox9.IsChecked == true)
        {
        string firefox = " firefox";
        }
        if (checkBox10.IsChecked == true)
        {
        string vlc = " vlc";
        }
        if (checkBox11.IsChecked == true)
        {
        string ccleaner = " ccleaner";
        }
        if (checkBox12.IsChecked == true)
        {
        string teamviewer = " teamviewer";
        }
        if (checkBox13.IsChecked == true)
        {
        string anydesk = "";
        }
        if (checkBox14.IsChecked == true)
        {
        string adobereader = " adobereader";
        }
        if (checkBox15.IsChecked == true)
        {
        string malwarebytes = " malwarebytes";
        }
        if (checkBox16.IsChecked == true)
        {
        string libreoffice = "";
        }
        if (checkBox17.IsChecked == true)
        {
        string empty = "";
        }
        string opt_choco = choco;
        }


        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
        0
  2. Utilisateur anonyme
     
    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.

                    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
    0
    1. Utilisateur anonyme
       
      J'ai oublié de poster le résultat

      Quand le checkbox principal est décoché, on n'a accès à rien


      Une fois activé, on peut choisir une option et cliquer sur le bouton


      Ce qui donne
      0
  3. xGunner Messages postés 30 Statut Membre
     
    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
    0
  4. Utilisateur anonyme
     
    Je t'ai donné le code complet d'une fenêtre donc télécharger le projet ne changerait pas grand chose.

    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

    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. xGunner Messages postés 30 Statut Membre
     
    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
    0
  7. Utilisateur anonyme
     
    Lien valable 21 jours
    https://www.cjoint.com/c/JHem4m3kNt5
    0