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 :

MouseDown dans un objet MouseUp dans un autre


Sujet :

C#

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Février 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2012
    Messages : 5
    Points : 1
    Points
    1
    Par défaut MouseDown dans un objet MouseUp dans un autre
    Bonjour tertous,

    Il doit y avoir quelque chose qui m'échappe avec les évènements sur la souris.

    Je m'explique.

    J'ai fait un damier composé de "usercontrol". Maintenant ce que je voudrais faire, c'est à l'aide de ma souris cliquer sur une case de mon damier (donc un usercontrol) maintenir appuyer et relâcher sur une autre case de ce même damier, et ensuite "colorier" la zone.

    J'ai donc pensé a un MouseDown pour mémoriser ma case de départ et un MouseUp pour mémoriser ma case d'arrivée... Mais non, le MouseUp se fait par rapport à ma case d'origine (ce qui semble logique quand on y réfléchit). Du coup comment faire ce que je souhaite faire ?

    J'ai beau chercher, mais je vois pas comment cette "technique" peut s'appeler pour effectuer une recherche efficace.

    Par avance Merci !

  2. #2
    Membre expérimenté
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 793
    Points : 1 327
    Points
    1 327
    Par défaut
    Bonjour,
    lors du mouse_up, peut être pourriez-vous vérifier au dessus de quel composant se trouve le pointeur

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 122
    Points : 78
    Points
    78
    Par défaut
    Bonjour,

    Regardez plutôt du coté de DragDrop de ton userControl.

    Salutations !

    PS : Ma réponse est arrivée quelques minutes après une autre solution, peut-être moins compliquée. J'étais en train de rédiger celle-ci et donc je ne l'ai pas vu.

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Février 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2012
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par asmduty Voir le message
    Bonjour,
    lors du mouse_up, peut être pourriez-vous vérifier au dessus de quel composant se trouve le pointeur
    Bonjour,

    d'accord, donc pas de solution "simple" il faut rechercher l'autre usercontrol "survolé" finalement

  5. #5
    Membre expérimenté
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 793
    Points : 1 327
    Points
    1 327
    Par défaut
    C'est comme ça que j'aurais fait en tous cas, mais peut être que le drag and drop pourrait être plus simple comme l'a proposé Potus, je ne m'en suis jamais servi donc je ne saurais dire.

  6. #6
    Nouveau Candidat au Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Février 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2012
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Salut, et merci pour vos réponses.

    J'ai essayé, mais non
    Ce qui me semble assez logique finalement, mais du coup je crois que quelque chose m'échappe sur les évènements.

    Dés que je quitte ma case je n'ai plus rien.

    Mon idée, mon projet me semblait pourtant très basique. Je vous l'expose, peut être que je m'y prends mal dans ma démarche.

    Je veux pouvoir dessiner un quadrillage de taille variable, et ensuite pouvoir sélectionner des "blocs de cases" pour y déposer des objets. Concrètement colorier un bloc de cases. L'idée c'est de positionner un certain nombre de composant sans collision. J'ai opté pour un usercontrol pour mes cases que je génère au sein d'un panel. Après se pose donc le problème de ma selection...

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 122
    Points : 78
    Points
    78
    Par défaut
    Citation Envoyé par DavidDuNord Voir le message
    ...je crois que quelque chose m'échappe sur les évènements.
    Dés que je quitte ma case je n'ai plus rien.
    Normal que tu n'ai plus rien, puisque tu l'as quitté ..

    Comme tu as l'air de trouver cela un peu compliqué, je t'ai mis un exemple "simple" écrit par un indien (Rakesh Kumar) que tu trouveras a cette adresse : A simple Drag Drop in Winform

    Tu as du oublier de lui dire de mémoriser les données (DoDragDrop) qui t'intéressent quand tu quittes ton contrôle, où tout autre chose que l'on pourra te dire si on voit ton code.
    Si l'exemple que je t'ai donné de Rakesh ne suffit pas, mets nous le code que t'utilise pour voir d'où peut venir ton problème.

    Salutations !

  8. #8
    Nouveau Candidat au Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Février 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2012
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Merci,

    Je n'avais pas encore testé la solution avec dragdrop... je vais le faire grace a ce tuto. Merci.

  9. #9
    Nouveau Candidat au Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Février 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2012
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Re bonjour,

    Je vous mets le code... peut être que ce sera plus parlant.

    J'ai essayé le drapdrop... mais j'ai un "interdit" quand je survole mes autres usercontrol...

    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
     
    namespace DA.GenerateurUppaal
    {
        public partial class FrmMain : Form
        {
            private Variables oVariables = new Variables();
     
            private int debutObjetX;
            private int debutObjetY;
            private int positionDebutX;
            private int positionDebutY;
            private int finObjetX;
            private int finObjetY;
            private bool clickOK = false;
     
            private Color Ajout;
     
            public FrmMain()
            {
                InitializeComponent();
            }
     
     
     
            private void button1_Click(object sender, EventArgs e)
            {
     
                //génération de ma grille avec mes X*Y usercontrol.
                oVariables.tailleZoneX = Convert.ToInt16(TailleZoneX.Value);
                oVariables.tailleZoneY = Convert.ToInt16(TailleZoneY.Value);
     
                oVariables.casesZone = new Case[oVariables.tailleZoneX, oVariables.tailleZoneY];
     
                int largeur = zonePO.Width / oVariables.tailleZoneY;
                int longueur = zonePO.Height / oVariables.tailleZoneX;
     
                for (int i = 0; i < oVariables.tailleZoneX; i++)
                {
                    for (int j = 0; j < oVariables.tailleZoneY; j++)
                    {
                        oVariables.casesZone[i, j] = new Case(i, j);
                        oVariables.casesZone[i, j].Left = j * largeur;
                        oVariables.casesZone[i, j].Top = i * longueur;
                        oVariables.casesZone[i, j].Height = longueur;
                        oVariables.casesZone[i, j].Width = largeur;
     
                        //evts
                        //oVariables.casesZone[i, j].MouseUp += new MouseEventHandler(Case_MouseUp);
                        oVariables.casesZone[i, j].MouseDown += new MouseEventHandler(Case_MouseDown);
                        oVariables.casesZone[i, j].MouseMove += new MouseEventHandler(Case_MouseMove);
                        oVariables.casesZone[i, j].DragEnter += new DragEventHandler(Case_DragEnter);
     
                        oVariables.casesZone[i, j].DragDrop += new DragEventHandler(Case_DragDrop);
     
                        this.zonePO.Controls.Add(oVariables.casesZone[i, j]);
     
                    }
                }
     
            }
            private void Case_DragDrop(object sender, DragEventArgs e)
            {
                Case macase = (Case)sender;
                macase.BackColor = Color.CadetBlue;
                MessageBox.Show("OK");
            }
     
            private void Case_DragEnter(object sender, DragEventArgs e)
            {
                Case macase = (Case)sender;
                macase.BackColor = Color.Green;
            }
     
            void Case_MouseMove(object sender, MouseEventArgs e)
            {
                Case macase = (Case)sender;
                if (clickOK)
                {
                    macase.BackColor = Color.AliceBlue;
                }
            }
     
            void Case_MouseDown(object sender, MouseEventArgs e)
            {
                Case macase = (Case)sender;
                clickOK = true;
     
                //memorisation des infos
                debutObjetX = macase.colonne;
                debutObjetY = macase.ligne;
                positionDebutX = e.X;
                positionDebutY = e.Y;
                //tbxApercu.Text = "debut : " + e.X.ToString() + " " + e.Y.ToString();
     
                //drag
                macase.BackColor = Color.Gold;
                macase.DoDragDrop(macase.BackColor, DragDropEffects.Copy);
            }
     
            void Case_MouseUp(object sender, MouseEventArgs e)
            {
                Case macase = (Case)sender;
                clickOK = false;
     
                tbxApercu.Text = tbxApercu.Text + " fin : " + e.X.ToString() + " " + e.Y.ToString();
                tbxApercu.Text = tbxApercu.Text + " taille case : " + macase.Width.ToString() + " " + macase.Height.ToString();
     
                //calcul du deplacement en X
                int deplacementX = Math.Abs(e.X + positionDebutX) / macase.Width;
                int deplacementY = Math.Abs(e.Y + positionDebutY) / macase.Height;
     
                if (e.X < 0)
                {
                    finObjetX = debutObjetX - deplacementX;
                }
                else
                {
                    finObjetX = debutObjetX + deplacementX;
                }
     
                if (e.Y < 0)
                {
                    finObjetY = debutObjetY - deplacementY;
                }
                else
                {
                    finObjetY = debutObjetY + deplacementY;
                }
     
                oVariables.casesZone[finObjetY, finObjetX].BackColor = Color.Red;
            }
        }
    }

    Donc mon code génère une grille. Quand j'ai un mouseDown je mets en jaune et je mémorise, et quand je relâche je devrais colorier aussi...

    Edit

    Je rectifie ! J'ai oublié d'autorise le allowdrop sur mes contrôles. Donc maintenant ca fonctionne quasiment.. Sauf que j'aimerais générer un beau rectangle... Mais je continue de regarder.

    Merci pour votre aide !

Discussions similaires

  1. Réponses: 2
    Dernier message: 18/10/2012, 13h49
  2. Réponses: 1
    Dernier message: 13/08/2009, 13h58
  3. Utiliser l'objet appelant dans l'objet appelé
    Par Nyphel dans le forum C++
    Réponses: 3
    Dernier message: 13/03/2007, 10h33
  4. Réponses: 4
    Dernier message: 20/07/2006, 10h35
  5. [JNI] : Obtenir les champs d'un objet inclus dans un objet
    Par jojo29 dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 27/04/2006, 13h36

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