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 :

Déplacer des controles - C#


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    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
    Par défaut Déplacer des controles - C#
    Bonjour à tous,

    Voila, mon petit problème est de pouvoir déplacer un contrôle,ex: un bouton, a l'aide de la souris. J'ai déjà un code qui fonctionne très bien, le voici :

    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
     
     
    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;
    using System.Runtime.InteropServices;
     
     
    namespace déplacement_objet
    {
        public partial class Form1 : Form
        {
            private const int HTCAPTION = 0x2;
            private const int WM_NCLBUTTONDOWN = 0xA1;
     
            [DllImport("User32.dll")]
            public static extern bool ReleaseCapture();
     
            [DllImport("User32.dll")]
            public static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam); 
     
     
            public Form1()
            {
                InitializeComponent();
            }
     
            private void button1_MouseDown(object sender, MouseEventArgs e)
            {
                if (e.Button == MouseButtons.Left)
                {
                    ReleaseCapture();
                    SendMessage(this.button1.Handle, WM_NCLBUTTONDOWN, HTCAPTION, 0);
                }
            }
     
        }
    }

    Le problème est que mon patron ne souhaite pas avoir recours a l'importation de la dll User32.dll

    Quelqu'un aurait-il une solution autre que celle la SVP?

    Merci de m'aider si vous le pouvez...

  2. #2
    Expert confirmé
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Par défaut
    Citation Envoyé par Evildoer_62 Voir le message
    Le problème est que mon patron ne souhaite pas avoir recours a l'importation de la dll User32.dll
    Ton patron est heureux, les Windows Forms en entier sont basés sur user32.dll. A moins qu'il veuille porter un jour sur Mono ...

    m'enfin bref, sur le coup la seule autre méthode à laquelle je pense c'est d'intercepter l'évènement OnMouseMove et d'associer ce déplacement à la position du bouton, sauf que même là on peut avoir des problèmes parce que le composant parent ne reçois pas MouseMove lorsque l'un de ses enfants contient la souris. Bien sur on peut contourner ce comportement mais il faut surcharger WndProc ce qui reviens un peut à l'utilisation de user32.

  3. #3
    Membre averti
    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
    Par défaut
    Bonjour, Oui c'est vrai que ca reviens un peu au même et encore la c'est en moins consistant je pense non? Si jamais tu trouves une petite partie de code permattant de le faire autrement pourrais tu me prévenir STP?

    Merci d'avance...

    Bye

  4. #4
    Membre averti
    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
    Par défaut
    Citation Envoyé par smyley Voir le message
    Ton patron est heureux, les Windows Forms en entier sont basés sur user32.dll. A moins qu'il veuille porter un jour sur Mono ...
    Voila ce qu'il m'a dit : "ok, il faut éviter d'utiliser des User32.Dll ; trouve une autre solution beaucoup plus .NET"

    Ca me parait difficile...après je ne sais pas ce que tu en pense...

    Merci encore...

  5. #5
    Expert confirmé
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Par défaut
    Citation Envoyé par Evildoer_62 Voir le message
    Voila ce qu'il m'a dit : "ok, il faut éviter d'utiliser des User32.Dll ; trouve une autre solution beaucoup plus .NET"
    Non mais attend c'est un truc de dingue. A ma connaissance il n'y a pas de moyen évident d'utiliser la souris avec les Windows Forms, justement à cause du fait que le parent ne reçois pas toujours la souris des enfants (d'ailleurs c'est corrigé avec WPF). Quand tu utilise la souris sur un contrôle pour lui même ça marche mais quand c'est pour utiliser celle des contrôle enfants là tu rame.
    Mais le pire c'est que ton code fait ~5 lignes avec 2 fonctions importés dans ton programme tout en sachant qu'il y en a des milliers qui sont importées par exemple quand tu fait Form f = new Form();. Pourquoi on devrai éviter d'utiliser user32.dll ?!
    J'aurai compris si tu utilisais comme un bourrin CreateWindow pour faire tes forms mais là ...

  6. #6
    Membre averti
    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
    Par défaut
    Re

    Je suis tout à fait d'accord avec toi,c'est ce que je voulais entendre...ou plutot lire , c'est pour cela que ça me semble compliqué de le faire d'une autre façon que celle ci...

    En tout cas merci de t'être attardé sur mon problème, je verrais bien si je trouve une autre solution...Si jamais quelqu'un peut me venir en aide, qu'il n'hésite pas surtout ...



  7. #7
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Par défaut
    salut

    ton patron : c'est un charlot !!!

    Il veut une solution "plus" .Net, mais il ne connait même pas .Net !!!

    C'est exceptionnel comme demande que te fais ton boss !!!

    La solution du OnMouseMove est LA solution la "plus" .Net (avec les inconvénients sités).

    J'adore ces patrons qui demandent des choses sans rien n'y connaitre !!!

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

Discussions similaires

  1. [AC-2003] Déplacer des controles dans un état: quand et comment?
    Par yupyupxav dans le forum IHM
    Réponses: 6
    Dernier message: 11/06/2009, 22h38
  2. [VBA-E] Est il possible de creer dynamiquement des controles en VBA
    Par bbkenny dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 13/08/2004, 20h04
  3. Comment peut on integer des controles dans un prog opengl
    Par franck31400 dans le forum OpenGL
    Réponses: 2
    Dernier message: 28/04/2004, 09h06
  4. [VB.Net] Faire du JS sur des contrôles côté serveur
    Par TagadaTsoin dans le forum ASP.NET
    Réponses: 4
    Dernier message: 03/11/2003, 15h51
  5. [VB6] Comment boucler sur des controls d'un form ?
    Par lankviller dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 27/01/2003, 16h29

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