[Debutant] grouper des controles sélectionner a l' aide d' un bouton.

dragonfly22000 Messages postés 49 Date d'inscription mardi 11 décembre 2018 Statut Membre Dernière intervention 13 avril 2021 - 24 févr. 2019 à 12:45
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 - 24 févr. 2019 à 19:43
Bonjour, dans mon petit programme je génère des contrôles de toutes sortes (TextBox, Panel) que j'enregistre par la suite en .Xml dans un dossier.
J'aurais voulu pouvoir faire de la multi-sélection (key.control) et pouvoir grouper/dégrouper les contrôles sélectionnés a l'aide d'un bouton.
Mon problème est que je ne sais pas ou chercher pour avoir un début de réponse ....
Pourriez-vous me donner une piste de recherche.
Merci par avance bien a vous.

3 réponses

Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 656
Modifié le 24 févr. 2019 à 12:53
Peux tu détailler ce que tu veux dire par
pouvoir faire de la multi-sélection (key.control) et pouvoir grouper/dégrouper les contrôles sélectionnés

1
dragonfly22000 Messages postés 49 Date d'inscription mardi 11 décembre 2018 Statut Membre Dernière intervention 13 avril 2021
24 févr. 2019 à 13:33
Déjà, merci encore (c'est toujours toi qui me réponds).
ci dessous une capture d’écran.


Je fabrique un ensemble de contrôles à l'aide des boutons à gauche (Add...)
Tout les contrôles sont sélectionnables un par un .
Moi j'aurais voulu pouvoir en sélectionner plusieurs en même temps , par exemple les textbox "Soca" et créer un groupe avec.
C'est a dire qu'une fois le groupe créer, lorsque je clique sur une Textbox Soca ça me sélectionne les 5 Textboxs Soca.
En fait c'est la fonctions group/Ungroup dans la plupart des logiciel de dessin.
J’espère ne pas être trop fouillis dans mes explications.
Merci d'avance pour les pistes de recherche.
Bien a toi.
0
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 656
24 févr. 2019 à 14:01
Question bête, comment l'utilisateur va t il écrire dans une textbox spécifique si à chaque fois ça sélectionne le groupe entier?

Question moins bête, t'es en Winform ou en WPF?

c'est toujours toi qui me réponds
pour les questions C#, malheureusement la communauté n'est plus ce qu'elle était.....
1
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 656
24 févr. 2019 à 14:22
Autre chose aussi, si ta capture est une image de ton programme en exécution, alors tu as déjà codé la visualisation de la sélection d'un contrôle.
Si tel est le cas, poste ton code s'il te plait.
0
dragonfly22000 Messages postés 49 Date d'inscription mardi 11 décembre 2018 Statut Membre Dernière intervention 13 avril 2021
24 févr. 2019 à 14:39
A la question comment l' utilisateur pourra écrire dans les textbox une fois grouper?
Je pensais faire un bouton dégrouper une fois que la position de l'ensemble des contrôles était satisfaisantes pour l'utilisateur.

Je suis en winForm.

Pour le code qui me dessine des petits rectangles autour d'un contrôle sélectionné:

 private void DrawControlBorder(object sender)
        {
            Control control = (Control)sender;
            //define the border to be drawn, it will be offset by DRAG_HANDLE_SIZE / 2
            //around the control, so when the drag handles are drawn they will be seem
            //connected in the middle.
            Rectangle Border = new Rectangle(
                new Point(control.Location.X - DRAG_HANDLE_SIZE / 2,
                    control.Location.Y - DRAG_HANDLE_SIZE / 2),
                new Size(control.Size.Width + DRAG_HANDLE_SIZE,
                    control.Size.Height + DRAG_HANDLE_SIZE));
            //define the 8 drag handles, that has the size of DRAG_HANDLE_SIZE
            Rectangle NW = new Rectangle(
                new Point(control.Location.X - DRAG_HANDLE_SIZE,
                    control.Location.Y - DRAG_HANDLE_SIZE),
                new Size(DRAG_HANDLE_SIZE, DRAG_HANDLE_SIZE));
            Rectangle N = new Rectangle(
                new Point(control.Location.X + control.Width / 2 - DRAG_HANDLE_SIZE / 2,
                    control.Location.Y - DRAG_HANDLE_SIZE),
                new Size(DRAG_HANDLE_SIZE, DRAG_HANDLE_SIZE));
            Rectangle NE = new Rectangle(
                new Point(control.Location.X + control.Width,
                    control.Location.Y - DRAG_HANDLE_SIZE),
                new Size(DRAG_HANDLE_SIZE, DRAG_HANDLE_SIZE));
            Rectangle W = new Rectangle(
                new Point(control.Location.X - DRAG_HANDLE_SIZE,
                    control.Location.Y + control.Height / 2 - DRAG_HANDLE_SIZE / 2),
                new Size(DRAG_HANDLE_SIZE, DRAG_HANDLE_SIZE));
            Rectangle E = new Rectangle(
                new Point(control.Location.X + control.Width,
                    control.Location.Y + control.Height / 2 - DRAG_HANDLE_SIZE / 2),
                new Size(DRAG_HANDLE_SIZE, DRAG_HANDLE_SIZE));
            Rectangle SW = new Rectangle(
                new Point(control.Location.X - DRAG_HANDLE_SIZE,
                    control.Location.Y + control.Height),
                new Size(DRAG_HANDLE_SIZE, DRAG_HANDLE_SIZE));
            Rectangle S = new Rectangle(
                new Point(control.Location.X + control.Width / 2 - DRAG_HANDLE_SIZE / 2,
                    control.Location.Y + control.Height),
                new Size(DRAG_HANDLE_SIZE, DRAG_HANDLE_SIZE));
            Rectangle SE = new Rectangle(
                new Point(control.Location.X + control.Width,
                    control.Location.Y + control.Height),
                new Size(DRAG_HANDLE_SIZE, DRAG_HANDLE_SIZE));

            //get the form graphic
            Graphics g = DistriMakerPanel.CreateGraphics();
            //draw the border and drag handles
            ControlPaint.DrawBorder(g, Border, Color.Gray, ButtonBorderStyle.Dotted);
            ControlPaint.DrawGrabHandle(g, NW, true, true);
            ControlPaint.DrawGrabHandle(g, N, true, true);
            ControlPaint.DrawGrabHandle(g, NE, true, true);
            ControlPaint.DrawGrabHandle(g, W, true, true);
            ControlPaint.DrawGrabHandle(g, E, true, true);
            ControlPaint.DrawGrabHandle(g, SW, true, true);
            ControlPaint.DrawGrabHandle(g, S, true, true);
            ControlPaint.DrawGrabHandle(g, SE, true, true);
            g.Dispose();

            Graphics p = pnlMain.CreateGraphics();
            //draw the border and drag handles
            ControlPaint.DrawBorder(p, Border, Color.Gray, ButtonBorderStyle.Dotted);
            ControlPaint.DrawGrabHandle(p, NW, true, true);
            ControlPaint.DrawGrabHandle(p, N, true, true);
            ControlPaint.DrawGrabHandle(p, NE, true, true);
            ControlPaint.DrawGrabHandle(p, W, true, true);
            ControlPaint.DrawGrabHandle(p, E, true, true);
            ControlPaint.DrawGrabHandle(p, SW, true, true);
            ControlPaint.DrawGrabHandle(p, S, true, true);
            ControlPaint.DrawGrabHandle(p, SE, true, true);
            p.Dispose();

            Graphics f = flowLayoutPanel1.CreateGraphics();
            //draw the border and drag handles
            ControlPaint.DrawBorder(f, Border, Color.Gray, ButtonBorderStyle.Dotted);
            ControlPaint.DrawGrabHandle(f, NW, true, true);
            ControlPaint.DrawGrabHandle(f, N, true, true);
            ControlPaint.DrawGrabHandle(f, NE, true, true);
            ControlPaint.DrawGrabHandle(f, W, true, true);
            ControlPaint.DrawGrabHandle(f, E, true, true);
            ControlPaint.DrawGrabHandle(f, SW, true, true);
            ControlPaint.DrawGrabHandle(f, S, true, true);
            ControlPaint.DrawGrabHandle(f, SE, true, true);
            f.Dispose();
        }


J'ai trouver ce bout de code je ne suis pas l'auteur.

Merci encore.
0
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 656
24 févr. 2019 à 18:16
OK

alors je pense qu'il te faut gérer une liste de listes.

List<List<Control>> mesGroupes = new List<List<Control>>();


Quand tu démarres l'association, tu ajoutes une liste
List<Control>() nouveauGroupe = new List<Control>();
mesGroupes.Add(nouveauGroupe);


Et quand tu cliques sur un contrôle
 nouveauGroupe.Add(leControle);

Et il faut que tu dessines la sélection non plus en fonction des coins d'un contrôle, mais des extrêmes du groupe, en te servant d'une requête Min ou Max ça devrait le faire.

Quand tu veux chercher si un contrôle fait partie d'un groupe, un truc dans le style

List<Control>() leGroupe = mesGroupes.SingleOrDefault(g => g.Contains(leControle));
if (leGroupe != null)//le contrôle fait parti de leGroupe



J'ai tapé de tête, y'a p'tet des coquilles
1
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 656
24 févr. 2019 à 18:48
Sinon tu peux aussi écrire une classe dédié, elle disposerait d'une liste de contrôles privée, des coordonnées des extrêmes et de toutes les infos utiles.
0
dragonfly22000 Messages postés 49 Date d'inscription mardi 11 décembre 2018 Statut Membre Dernière intervention 13 avril 2021
24 févr. 2019 à 19:22
Franchement merci beaucoup pour les infos je vais essayer de mettre ça en place ,je te tiens au jus des que ça tourne.
Et encore merci tu m’évites de longues heures de recherche.
A très bientôt l'ami.
0
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 656
24 févr. 2019 à 19:43
De rien
0
Rejoignez-nous