IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Obtenir Panel à partir de ses coordonnées


Sujet :

C#

  1. #1
    Membre habitué
    Inscrit en
    Juin 2007
    Messages
    359
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 359
    Points : 153
    Points
    153
    Par défaut Obtenir Panel à partir de ses coordonnées
    Bonjour, je débute sous C" et je vourais savoir comment faire pour retrouver un Panel lorsque l'on dispose de ses coordonnées X et Y.

    Merci

  2. #2
    Expert confirmé
    Avatar de debug
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    1 034
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 034
    Points : 4 093
    Points
    4 093
    Par défaut
    Bonjour,

    Qu'est ce que tu entends par "retrouver" ton panel ?? Le retrouver dans la liste des contrôles ?
    Si c'est ça, utilise la méthode GetChildAtPoint(new point(x,y)); de ton formulaire.

  3. #3
    Membre habitué
    Inscrit en
    Juin 2007
    Messages
    359
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 359
    Points : 153
    Points
    153
    Par défaut
    D'accord, merci, j'ai un autre petit problème, c'est que je ne réussis pas à retrouver les coordonnées du sender d'un évenement lorsque je veux redéfinir le DragEnter et le DragAndDrop d'un Control dérivé de Panel,...

    J'ai donc le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    protected override void OnDragDrop(DragEventArgs drgevent)
            {            
                int x, y;
                x = drgevent.X;
                y = drgevent.Y;
                Point pt=new Point(x,y);
                Form form_above = base.FindForm();            
                Control ctrl=form_above.GetChildAtPoint(pt);  //mais ici j'obtiens le mauvais controle
                Panel pan = (Panel)ctrl;
                Ticket tic = (Ticket)pan;
                this.Add((Ticket)tic);
                base.OnDragDrop(drgevent);                               
            }
    Seulement je me rends compte maintenant que les coordonnées x et y obtenues sont celles du point ou j'ai déposé le Panel, et donc, quand je fais : form.GetChildAtPoint(pt); tout ce que j'obtiens c'est le panel de réception, et non pas celui que je drag,...

    Et là, je ne sais pas comment faire pour retrouver les coordonnées non pas de l'objet récepteur, mais du sender !

    J'espère que c'est compréhensible,...

  4. #4
    Expert confirmé
    Avatar de debug
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    1 034
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 034
    Points : 4 093
    Points
    4 093
    Par défaut
    Bonjour,

    Au lieu de passer par une surcharge de ta méthode essaies d'utiliser l'évent DragDrop où tu as bien l'objet sender

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    private void monobjet_DragDrop(object sender, System.Windows.Forms.DragEventArgs e)
    {
    }

  5. #5
    Membre habitué
    Inscrit en
    Juin 2007
    Messages
    359
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 359
    Points : 153
    Points
    153
    Par défaut
    Merci,
    J'ai essayé de redéfinir dans ma classe Planning la fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    private void Planning_DragDrop(object sender, System.Windows.Forms.DragEventArgs e)
            {
                nbrTicket = 5; //ici point d'arrêt, juste pour voir si ça rentre dedans
            }
    Mais je ne rentre jamais dedans, je ne comprends pas pourquoi, et pourtant, je rentre dans la fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    protected override void OnDragDrop(DragEventArgs drgevent)
    Mais là, je n'ai pas l'objet sender !!!

    Je ne sais plus quoi faire !!!

  6. #6
    Membre habitué
    Inscrit en
    Juin 2007
    Messages
    359
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 359
    Points : 153
    Points
    153
    Par défaut
    Ok, j'ai compris ce que tu voulais dire à propos de la redéfinition du :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    private void Planning_DragDrop(object sender, System.Windows.Forms.DragEventArgs e)
    Seulement, le problème, c'est que je voudrais réussir à faire une classe dans laquelle ce comportement soit toujours le même, de manière à n'avoir pas à le recoder à chaque fois, et c'est là que ça coince, parceque, si cette fonction dépend de la form dans laquelle je me trouve, j'ai l'objet sender, mais je dois la redéfinir à chaque fois, tandis que si je redéfinis la méthode :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    protected override void OnDragDrop(DragEventArgs drgevent)
    Je ne réussis pas à accéder à mon objet dragué
    Si quelqu'un à une idée, surtout qu'il n'hésite pas, parce que moi c'est vide !

  7. #7
    Expert confirmé
    Avatar de debug
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    1 034
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 034
    Points : 4 093
    Points
    4 093
    Par défaut
    Bonjour,

    Les drag & drop, j'en ai pas fait beaucoup... ça reste très flou pour moi

  8. #8
    Membre habitué
    Inscrit en
    Juin 2007
    Messages
    359
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 359
    Points : 153
    Points
    153
    Par défaut
    [En se passant la corde autour du cou]
    Quelqu'un d'autre saurait comment faire pour obtenir l'objet passé dragué avec la fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    protected override void OnDragDrop(DragEventArgs drgevent)
    ?

    PS: merci quand même debug

  9. #9
    Membre habitué
    Inscrit en
    Juin 2007
    Messages
    359
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 359
    Points : 153
    Points
    153
    Par défaut
    Bon, là je pense que j'ai trouvé une réponse qui me paraît bonne, je récupère l'objet directement dans la fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    protected override void OnDragDrop(DragEventArgs drgevent)
            {
                object tp = drgevent.Data.GetData((drgevent.Data.GetFormats())[0]);
                if ( String.Equals( (drgevent.Data.GetFormats())[0],"nom_projet.nom_composant" ))
                {
                    try
                    {
                        nom_composant tick = (nom_composant)tp;
                        int i = 5;
                        this.Add(tick);
                    }
                    catch (Exception ex)
                    {
                        int j = 5;
                    }
                }
            }
    En faisant ça, j'ai l'impression que ça marche en tout cas !!! (en attendant de voir que en fait, il y a un gros problème,...)

    Merci encore

  10. #10
    Membre émérite Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Points : 2 925
    Points
    2 925
    Par défaut
    Pour une méthode :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private void Planning_DragDrop(object sender, System.Windows.Forms.DragEventArgs e)
    abonnée à l'event DragDrop d'un Controle c, l'objet sender est c. Plus généralement, toutes les méthodes abonnées aux events du framwork sont de la form void truc(object sender, xxxEventArgs e), où "sender", comme son nom l'indique, est l'objet qui a émis l'événement.

    La fonction OnDragDrop correspondante est protégée, dans la classe Control ; le paramètre "object sender" ne sert à rien, parce qu'il vaut toujours "this".

    Donc, comme tu t'en es rendu compte tout seul (), l'objet dragué est dans l'EventArgs.

  11. #11
    Membre habitué
    Inscrit en
    Juin 2007
    Messages
    359
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 359
    Points : 153
    Points
    153
    Par défaut
    Certes, merci pour la précision, mais, j'ai mis du temps à me rendre compte que le sender était égal à this !!!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Google Maps] Obtenir adresse à partir de coordonnées GPS
    Par mikl86 dans le forum APIs Google
    Réponses: 1
    Dernier message: 22/11/2012, 22h25
  2. créer une matrice à partir de ses coordonnées
    Par Décembre dans le forum MATLAB
    Réponses: 5
    Dernier message: 20/01/2012, 21h00
  3. trouver un objet à partir de ses coordonnées
    Par ernestrenan dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 12/10/2011, 17h58
  4. Tracer une ROI à partir de ses coordonnées
    Par gaullum dans le forum ImageJ
    Réponses: 2
    Dernier message: 13/05/2010, 14h25
  5. Réponses: 2
    Dernier message: 06/06/2007, 17h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo