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

Windows Forms Discussion :

Mauvais positionnement controle- drag&drop


Sujet :

Windows Forms

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 31
    Points : 13
    Points
    13
    Par défaut Mauvais positionnement controle- drag&drop
    Bonjour à tous,
    Voilà mon problème, j'ai créé un tab control avec à l'intérieur d'une des tabpages un treeview
    A coté de ce tabcontrol, il y a un autre tabcontrol dans lequel un autre tabpage.
    J'arrive a faire un drag&drop entre mon treeview et mon tabpage de mon autre tabcontrol ce qui me crée un panel dans celui-ci lorsque je relache la souris...
    Mais mon problème c'est que mon panel ne se crée pas du tout au bon endroit,il se crée plus bas dans mon tabpage et je n'arrive pas à le positionner là où j'ai relaché le boutton de la souris...
    Pourriez vous m'aider s'il vous plait.

    Evil.

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par Evildoer_62 Voir le message
    Pourriez vous m'aider s'il vous plait.
    Si tu ne montres pas ton code, on aura du mal à t'aider

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 31
    Points : 13
    Points
    13
    Par défaut
    Désolé
    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
    18
    void objTabPage_DragDrop(object sender, DragEventArgs e)
            {
                TabPage objtabpage = (TabPage)sender;
                Panel pnl_panel1 = new Panel();
     
                objtabpage.Controls.Add(pnl_panel1);
     
                pnl_panel1.Location = new Point(pnl_panel1.Location.X + e.X - positionClick.X, pnl_panel1.Location.Y + e.Y - positionClick.Y);                   
                pnl_panel1.BorderStyle = BorderStyle.None;
                pnl_panel1.BackColor = System.Drawing.Color.Transparent;
                pnl_panel1.BackgroundImage = global::GAD_C.Properties.Resources.Rectangle;
                pnl_panel1.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center;
                pnl_panel1.Margin = new System.Windows.Forms.Padding(0);
                pnl_panel1.Size = new System.Drawing.Size(150, 40);
     
                pnl_panel1.MouseDown += new MouseEventHandler(pnl_panel1_MouseDown);
                pnl_panel1.MouseMove += new MouseEventHandler(pnl_panel1_MouseMove);                  
            }
    Voila lors de mon drag&drop je crée ce panel mais je n'arrive pas à la positionner à l'endroit où je lache la souris.
    Peux-tu m'aider s'il te plait?

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Tu te compliques la vie pour rien en fait
    Le X et le Y indiqués dans l'évènement sont relatifs au contrôle qui reçoit le drag/drop. La position d'un contrôle est relative à son contrôle parent. Donc au lieu de ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pnl_panel1.Location = new Point(pnl_panel1.Location.X + e.X - positionClick.X, pnl_panel1.Location.Y + e.Y - positionClick.Y);
    Il suffit de faire ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pnl_panel1.Location = e.Location;
    Et normalement ça devrait le faire...

    Par contre j'ai pas pris en compte "positionClick", vu que je sais pas ce que c'est... la correction que j'ai indiquée devrait placer le coin en haut à gauche du panel à l'endroit où tu laches le bouton de la souris

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 537
    Points : 369
    Points
    369
    Par défaut
    Juste une idée:
    Si c'était ton redimensionnement qui modifiait la position?
    Il faudrait placer la localisation à la fin!

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 31
    Points : 13
    Points
    13
    Par défaut
    Lorsque je remplace par ce que tu m'as indiqué ca me donne l'erreur suivante:

    'System.Windows.Forms.DragEventArgs' ne contient pas une définition pour 'Location' et aucune méthode d'extension 'Location' acceptant un premier argument de type
    'System.Windows.Forms.DragEventArgs' n'a été trouvée (une directive using ou une référence d'assembly est-elle manquante*?)

    Merci pour ton aide.

    Evil.

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 31
    Points : 13
    Points
    13
    Par défaut
    Citation Envoyé par NejNej Voir le message
    Juste une idée:
    Si c'était ton redimensionnement qui modifiait la position?
    Il faudrait placer la localisation à la fin!
    Non j'ai testé en placant mon positionnement après mon redimensionnement mais ca fait toujours pareil, ça n'est pas ça qui joue...
    Mais merci quand même d'avoir proposé une solution

    As tu une autre solution?

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 537
    Points : 369
    Points
    369
    Par défaut
    Déjà comme Tomlev j'ai du mal à voir à quoi sert le positionClick!
    Si ton contrôle apparait trop bas , si tu enlève le "-positionClick.Y" ?

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 31
    Points : 13
    Points
    13
    Par défaut
    non ca c'était une erreur de ma part que j'avais oublié d'enlever mais qui ne jouait en rien puisque sa valeur été nulle...
    Je l'ai enlevé la donc il me reste
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    pnl_panel1.Location = new Point(pnl_panel1.Location.X + e.X , pnl_panel1.Location.Y + e.Y);

  10. #10
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par Evildoer_62 Voir le message
    Lorsque je remplace par ce que tu m'as indiqué ca me donne l'erreur suivante:

    'System.Windows.Forms.DragEventArgs' ne contient pas une définition pour 'Location' et aucune méthode d'extension 'Location' acceptant un premier argument de type
    'System.Windows.Forms.DragEventArgs' n'a été trouvée (une directive using ou une référence d'assembly est-elle manquante*?)
    Au temps pour moi, il n'y a pas de propriété Location... fais comme ça alors :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pnl_panel1.Location = new Point(e.X, e.Y);

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 31
    Points : 13
    Points
    13
    Par défaut
    Citation Envoyé par tomlev Voir le message
    Au temps pour moi, il n'y a pas de propriété Location... fais comme ça alors :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pnl_panel1.Location = new Point(e.X, e.Y);
    Non ça ne marche pas, il se décale toujours autant vers la droite et un peu plus bas...
    Je ne sais pas comment ca se fait...
    Merci si tu peux toujours m'aider.

    Evil.

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 31
    Points : 13
    Points
    13
    Par défaut
    Tu ne pense pas que ca pourrait venir du fait que je fais mon dragdrop vers un autre control?
    d'un treeview présent dans un tabpage vers un autre tabpage plus loin?

    Je ne sais pas...

    Evil.

  13. #13
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Bizarre... mets un breakpoint dans objTabPage_DragDrop, pour vérifier la valeur de X et de Y. Si tu droppes l'élément exactement en haut à gauche de la TabPage, tu devrais avoir (0,0). Si ce n'est pas le cas, on essaiera de comprendre pourquoi...

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 31
    Points : 13
    Points
    13
    Par défaut
    Re,
    Voila quand je drop comme tu m'as dit, les valeur que j'obtiens sont 300 et 100...
    J'ai donc regardé d'un peu plus pret et j'ai compris que comme mon tabcontrol était à l'intérieur d'un conteneur il fallait que je fasse :
    e.X - montabcontrol.location.X (la ca me la bien corrigé)

    J'ai donc fait de mm pour la hauteur cependant il y a toujours un écart de 100 donc pour la hauteur ca n'est pas ca qui joue et je ne sait pas du tout quoi.
    J'ai bien deux lignes de menu au dessus de mon tabcontrol mais ils ne sont pas à l'intérieur de mon conteneur donc je ne sais pas...Serait-ce ça qui joue quand même?

    Merci de ton aide
    Evil.

  15. #15
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    OK, je vois le problème... j'avais pas vérifié la doc parce que ça me paraissait évident, mais j'aurais dû
    En fait e.X et e.Y ne sont pas relatifs au contrôle qui reçoit le drop, ce sont des coordonnées écran ! Il faut donc les convertir en coordonnées relatives au contrôle, avec la méthode PointToClient
    Donc au lieu de ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pnl_panel1.Location = new Point(e.X, e.Y);
    Il faut faire ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pnl_panel1.Location = objtabpage.PointToClient(new Point(e.X, e.Y));
    Et cette fois ça devrait le faire

  16. #16
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 31
    Points : 13
    Points
    13
    Par défaut
    Citation Envoyé par tomlev Voir le message
    Et cette fois ça devrait le faire
    En effet ca marche nikel maintenant, merci beaucoup de ton aide précieuse Tomlev, tu m'as permis de bien avancer grâce à tes explications très claires, merci encore !! Up à toi !!!

    Evil.

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 29/07/2008, 16h06
  2. Drag and Drop sur un controle de DlgBox
    Par sex4fun dans le forum C++
    Réponses: 0
    Dernier message: 26/12/2007, 18h01
  3. Drag and drop pour control en VBA
    Par cbleas dans le forum VBA Access
    Réponses: 2
    Dernier message: 10/03/2007, 10h30
  4. Réponses: 3
    Dernier message: 29/07/2006, 02h26

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