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 un label sur une form


Sujet :

Windows Forms

  1. #1
    Membre régulier Avatar de maVariable
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    164
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 164
    Points : 105
    Points
    105
    Par défaut Déplacer un label sur une form
    salut,

    j'utilise l'API windows pour déplacer certains composants sur ma forme en execution. Ca marche parfaitement pour les boutons, mais pas pour les labels, alors que je les construit exactement pareil.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
            using System.Runtime.InteropServices;
     
            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);
    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
     
            //ok pour le bouton
            private void button1_MouseDown(object sender, MouseEventArgs e)
            {
                Button buttonSelected;
     
                buttonSelected = sender as Button;
     
                if (e.Button == MouseButtons.Left)
                {
                    ReleaseCapture();
                    SendMessage(buttonSelected.Handle, WM_NCLBUTTONDOWN, HTCAPTION, 0);
                }
            }
     
            //pas ok pour le label
            private void label1_MouseDown(object sender, MouseEventArgs e)
            {
                Label labelSelected;
     
                labelSelected = sender as Label;
     
                if (e.Button == MouseButtons.Left)
                {
                    ReleaseCapture();
                    SendMessage(labelSelected.Handle, WM_NCLBUTTONDOWN, HTCAPTION, 0);
                }
            }
    Est ce que j'adapte mal ? Il y a une explication logique ?
    un tiens vaut pas mieux que zéro tu l'auras pas

  2. #2
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    Citation Envoyé par maVariable Voir le message
    j'utilise l'API windows pour déplacer certains composants sur ma forme en execution


    et tu vas faire tes courses en hélicoptère ??


    (pour résumer, pourquoi utilises tu une api pour faire quelque chose de simple ?)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre régulier Avatar de maVariable
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    164
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 164
    Points : 105
    Points
    105
    Par défaut
    salut,

    d'une part ce genre d'exemple est courrament conseillé, comme ici... ...

    d'autre part j'utilise ce qui existe, parfaitement intégrable puisque windowsien, et plutot pratique, étant donné qu'il gère entre autre les sorties de fenêtre, et autre type de cas que je devrais prévoir si je m'amusais à gérer les positions, etc.. Et vu le nombre de controle que je vais avoir à gérer....

    bref, pourquoi réinventer la roue ?

    nb : pour faire avancer le schimblik, la propriété "locked" est bien sur false..
    un tiens vaut pas mieux que zéro tu l'auras pas

  4. #4
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    t'avais pas précisé déplacement par l'utilisateur ...
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Membre régulier Avatar de maVariable
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    164
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 164
    Points : 105
    Points
    105
    Par défaut
    oui effectivement, j'ai oublié de préciser ca
    En attendant, j'ai trouvé une astuce, j'utilise des boutons sans bordure, mis en apparence "flat", ca ressemble presque à un label. Mais c'est du bricolage...
    Du coup ma question reste ouverte
    un tiens vaut pas mieux que zéro tu l'auras pas

  6. #6
    Expert éminent
    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
    Points : 8 344
    Points
    8 344
    Par défaut
    Citation Envoyé par maVariable Voir le message
    d'une part ce genre d'exemple est courrament conseillé, comme ici... ...

    d'autre part j'utilise ce qui existe, parfaitement intégrable puisque windowsien, et plutot pratique, étant donné qu'il gère entre autre les sorties de fenêtre, et autre type de cas que je devrais prévoir si je m'amusais à gérer les positions, etc.. Et vu le nombre de controle que je vais avoir à gérer....
    heuu ... ouais.

    Plutôt que de se fatiguer avec les obscures utilisations de l'api Windows sur des HWND de fenêtres qui parfois fonctionnent bizarrement avec les contrôles .NET (ceux qui ne sont pas de simples wrappers sur les contrôles Win32) j'irai plutôt du côté des évènements MouseDown, MouseMove, MouseUp.
    L'idée c'est juste d'avoir une variable "moving" qui indique si on est en train de déplacer le contrôle. MouseDown lui donne la valeur true, MouseUp la valeur false, et dans MouseMove si moving vaut true on déplace le contrôle pour qu'il coïncide avec la position de la souris ... et tout ça sans aucun PInvoke, et qui plus es avec de grandes chances de pouvoir être multiplateformes.

Discussions similaires

  1. modifier le text d'un label sur une Form
    Par wissem.ba dans le forum Windows Forms
    Réponses: 3
    Dernier message: 03/01/2009, 00h35
  2. déplacer un objet TLabel sur une Form
    Par darkangel37 dans le forum C++Builder
    Réponses: 14
    Dernier message: 14/06/2006, 10h36
  3. Comment spécifier des raccourcis claviers sur une Form ?
    Par Sydaze dans le forum Composants VCL
    Réponses: 5
    Dernier message: 17/06/2005, 09h05
  4. Minimize Maximize perso sur une form autre que Application
    Par sdebrois dans le forum API, COM et SDKs
    Réponses: 5
    Dernier message: 07/03/2005, 17h59
  5. Comment mettre un label sur une image
    Par dug dans le forum MFC
    Réponses: 3
    Dernier message: 07/04/2004, 10h40

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