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

Messages postés
14
Date d'inscription
mardi 11 décembre 2018
Dernière intervention
24 février 2019
- - Dernière réponse : Whismeril
Messages postés
12932
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
23 mars 2019
- 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.
Afficher la suite 

Votre réponse

3 réponses

Meilleure réponse
Messages postés
12932
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
23 mars 2019
350
1
Merci
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

Quand j'étais petit, la mer Morte n'était que malade.
George Burns

Dire « Merci » 1

Heureux de vous avoir aidé ! Vous nous appréciez ? Donnez votre avis sur nous ! Evaluez CodeS-SourceS

Codes Sources 120 internautes nous ont dit merci ce mois-ci

dragonfly22000
Messages postés
14
Date d'inscription
mardi 11 décembre 2018
Dernière intervention
24 février 2019
-
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.
Commenter la réponse de Whismeril
Messages postés
12932
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
23 mars 2019
350
1
Merci
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.....

Dire « Merci » 1

Heureux de vous avoir aidé ! Vous nous appréciez ? Donnez votre avis sur nous ! Evaluez CodeS-SourceS

Codes Sources 120 internautes nous ont dit merci ce mois-ci

Whismeril
Messages postés
12932
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
23 mars 2019
350 -
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.
dragonfly22000
Messages postés
14
Date d'inscription
mardi 11 décembre 2018
Dernière intervention
24 février 2019
-
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.
Commenter la réponse de Whismeril
Messages postés
12932
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
23 mars 2019
350
1
Merci
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

Dire « Merci » 1

Heureux de vous avoir aidé ! Vous nous appréciez ? Donnez votre avis sur nous ! Evaluez CodeS-SourceS

Codes Sources 120 internautes nous ont dit merci ce mois-ci

Whismeril
Messages postés
12932
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
23 mars 2019
350 -
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.
dragonfly22000
Messages postés
14
Date d'inscription
mardi 11 décembre 2018
Dernière intervention
24 février 2019
-
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.
Whismeril
Messages postés
12932
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
23 mars 2019
350 -
De rien
Commenter la réponse de Whismeril

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.