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 :

Rendre un Label focusable ?


Sujet :

Windows Forms

  1. #1
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 154
    Points : 7 403
    Points
    7 403
    Billets dans le blog
    1
    Par défaut Rendre un Label focusable ?
    [EDIT]
    -- Abandonné --
    Finalement, j'utilise un TextBox, et j'ai modifié la façon dont je contrôlait le focus de mes UserControl.
    [/EDIT]
    Bonjour,

    Je suis en train de faire un UserControl qui contient différents éléments, donc un Label.

    Je veux que lorsque le label prends le focus (et non seulement lorsqu'on clique dessus -le focus peut se donner avec TAB par exemple -), je fasse un traitement, et qu'il envoie le focus au UserControl.

    Voici mon code :
    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
     
    using System;
    using System.Drawing;
    using System.Windows.Forms;
     
    namespace Planning.Controls
    {
        public partial class ucPlanningEntry : UserControl
        {
            private Color StandardColor = Color.Yellow;
            private Color FocusColor = Color.Orange;
     
            public Control ActuallyHasFocus = null;
     
            public ucPlanningEntry(string Text)
            {
                InitializeComponent();
                BackColor = StandardColor;
     
                label1.Text = Text;
                //label1.CanFocus = true;
                //label1.GotFocus += new EventHandler(label1_GotFocus);
                label1.Click += new EventHandler(label1_GotFocus);
            }
     
            protected override void OnGotFocus(EventArgs e)
            {
                base.OnGotFocus(e);
                BackColor = FocusColor;
            }
     
            protected override void OnLostFocus(EventArgs e)
            {
                base.OnLostFocus(e);
                BackColor = StandardColor;
            }
     
            private void label1_GotFocus(object sender, EventArgs e)
            {
                ucPlanningEntry parent = ((sender as Label).Parent as ucPlanningEntry);
                parent.ActuallyHasFocus = this;
                parent.Focus();
            }
        }
    }
    Si je tente de décommenter la partie en commentaires, alors j'ai une erreur comme quoi Label.CanFocus est readonly et ne peut être modifié.
    Je ne peux donc pas utiliser l'event GotFocus.
    Pourtant, je veux pouvoir donner le focus à cet élément (notamment pour pouvoir le rendre modifiable lors de l'appui sur F2).
    Pour des raisons d'ergonomie, je peux pouvoir lui donner le focus non seulement par souris, mais aussi par le clavier, donc je ne peux pas me contenter de ma verrue avec l'event Click...
    On ne jouit bien que de ce qu’on partage.

  2. #2
    Membre éprouvé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2007
    Messages
    693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 693
    Points : 1 187
    Points
    1 187
    Par défaut
    Bonjour,

    Hum, hum difficile car si un label ne peut avoir le focus !!! Peut-être pourrais-tu utiliser un textbox readonly ou non ? Ou sinon utiliser un hyperlinkbutton (je ne me souviens plus trop du nom du controle) comme ça l'utilisateur identifiera facilement les labels modifiables

  3. #3
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 154
    Points : 7 403
    Points
    7 403
    Billets dans le blog
    1
    Par défaut
    Finalement, j'utilise un TextBox, et j'ai modifié la façon dont je contrôlait le focus de mes UserControl.
    Finalement, ça donne ça :
    Code c# : 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
     
     
    using System;
    using System.Drawing;
    using System.Windows.Forms;
     
    namespace Planning.Controls
    {
        public partial class ucPlanningEntry : UserControl
        {
            private Color StandardColor = Color.Yellow;
            private Color FocusColor = Color.Orange;
     
            private DateTime _startdate;
            private DateTime _enddate;
     
            public ucPlanningEntry(DateTime StartDate, DateTime EndDate, string Text)
            {
                InitializeComponent();
                BackColor = StandardColor;
     
                _startdate = StartDate;
                _enddate = EndDate;
                textBox1.Text = Text;
                textBox1.GotFocus += new EventHandler(textBox1_GotFocus);
                textBox1.LostFocus += new EventHandler(textBox1_LostFocus);
            }
     
            private void textBox1_GotFocus(object sender, EventArgs e)
            {
                TextBox This = sender as TextBox;
                ucPlanningEntry parent = This.Parent as ucPlanningEntry;
                This.SelectAll();
                parent.BackColor = FocusColor;
            }
     
            private void textBox1_LostFocus(object sender, EventArgs e)
            {
                ucPlanningEntry parent = ((sender as TextBox).Parent as ucPlanningEntry);
                parent.BackColor = StandardColor;
            }
     
            public DateTime StartDate
            {
                get { return _startdate; }
                set { _startdate = value; }
            }
     
            public DateTime EndDate
            {
                get { return _enddate; }
                set { _enddate = value; }
            }
        }
    }
    On ne jouit bien que de ce qu’on partage.

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 15/03/2012, 08h37
  2. [C#]Comment rendre un label transparent ?
    Par Kcirtap dans le forum Windows Forms
    Réponses: 20
    Dernier message: 05/08/2009, 16h35
  3. [.NET 3]Rendre un label selectionnable
    Par bizet dans le forum Windows Forms
    Réponses: 4
    Dernier message: 15/05/2009, 14h03
  4. Réponses: 2
    Dernier message: 14/05/2007, 18h25
  5. [C#2] Comment rendre un label "multi styles" ?
    Par kunfuka dans le forum Windows Forms
    Réponses: 1
    Dernier message: 11/04/2006, 10h35

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