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 :

[C#] Création d'un bouton personnalisé


Sujet :

Windows Forms

  1. #1
    Expert éminent
    Avatar de _skip
    Homme Profil pro
    Développeur d'applications
    Inscrit en
    Novembre 2005
    Messages
    2 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur d'applications
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 898
    Points : 7 752
    Points
    7 752
    Par défaut [C#] Création d'un bouton personnalisé
    Bonjour,

    Voici mon problème, j'ai besoin de créer un bouton un peu spécial pour une application. Pour cela je créé une class library (dll), avec 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
    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
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
     
     
    namespace Composant
    {
        public partial class NoFocusButton : Button
        {
            public NoFocusButton()
            {
            }
     
            //keystroke
            [Category("Behavior"),
            Description("Keystroke simulée."),
            DefaultValue("")]
            public string KeyStr
            {
                get
                {
                    if (KeyStr == "")
                        return Text;
                    else
                        return KeyStr;
     
                }
                set { KeyStr = value; }
            }
     
     
            protected override void OnPaint(PaintEventArgs pe)
            {
                // TODO: Add custom paint code here
     
                // Calling the base class OnPaint
                base.OnPaint(pe);
            }
     
     
            private const int WM_MOUSEACTIVATE = 0x0021;
            private const int MA_NOACTIVATE = 0x0003;
     
            protected override void WndProc(ref Message m)
            {
                //message d'activation
                if (m.Msg == WM_MOUSEACTIVATE)
                {
                    //refuser le focus
                    m.Result = (IntPtr)MA_NOACTIVATE;
                }
                else
                {
                    //gestion standard
                    base.WndProc(ref m);
                }
             }
        }
    }
    Très simple en fait, j'ai juste rajouté une gestion interne pour un message windows et la propriété KeyStr.
    Le problème vient de la propriété KeyStr. Quand j'essaie de poser mon NoFocusButton sur une winform, tout semble normal, ça s'affiche. Par contre, sitôt que j'essaie d'afficher la fenêtre d'édition de propriété, vs2005 se ferme tout seul, sans message d'erreurs.

    Quelqu'un a une idée?
    J'ai déjà perdu 1 jour et demi à chercher, j'ai essayé sous VS2005, puis j'ai téléchargé la version express, le service pack 1 beta, rien ne change.

    Je suis ouvert à toute suggestion, Merci d'avance.

  2. #2
    Membre expérimenté Avatar de Mose
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 143
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 143
    Points : 1 379
    Points
    1 379
    Par défaut
    T'es pas obligé d'appeler base.WndProc dans tous les cas ?
    Et si tu essayes de le coller en dehors du else , ça marche mieux ?

  3. #3
    Expert éminent
    Avatar de _skip
    Homme Profil pro
    Développeur d'applications
    Inscrit en
    Novembre 2005
    Messages
    2 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur d'applications
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 898
    Points : 7 752
    Points
    7 752
    Par défaut
    Merci Mose mais ce n'était pas ça,
    J'ai trouvé la solution et je pleure à quel point c'était bête!

    Les getter/Setter de KeyStr ne font pas référence à une variable mais s'appellent récursivement ! Ah c'est tellement stupide que j'y pensais meme pas.

    Le reste marche impecc, j'ai pu créer ce clavier pour écran tactile.

  4. #4
    Membre expérimenté Avatar de Mose
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 143
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 143
    Points : 1 379
    Points
    1 379
    Par défaut
    Oui maintenant que tu le dis ça saute aux yeux.
    En revanche c'est curieux VS.Net ne t'es pas renvoyé une StackOverFlowException...

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

Discussions similaires

  1. Création d'un bouton personnalisé avec QGraphicsItem
    Par sniper5g08 dans le forum Débuter
    Réponses: 8
    Dernier message: 28/04/2010, 17h29
  2. [FLASH MX] Création d'un bouton standart.
    Par argon dans le forum Flash
    Réponses: 6
    Dernier message: 21/07/2005, 12h12
  3. [FLASH MX2004] Création d'un bouton Action Script
    Par chocobos dans le forum Flash
    Réponses: 12
    Dernier message: 13/04/2005, 12h03
  4. création d'un bouton de forme arrondie
    Par THIERRY L. dans le forum C++Builder
    Réponses: 2
    Dernier message: 15/12/2003, 14h04
  5. Réponses: 3
    Dernier message: 12/12/2003, 13h12

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