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 :

Format de focus


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Inscrit en
    Février 2011
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 106
    Par défaut Format de focus
    j'aimerai bien savoir comment changer le format de focus dans un textBox ?
    Précisément je veux le focus suivant : ( _ ) et non pas celui par defaut ( | )
    . Je vous remercie d'avance.

  2. #2
    Expert confirmé Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Par défaut
    Oops, impossible à priori !

    Il existe éventuellement une solution acrobatique.
    1) cacher le Caret (la barre verticale)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    [DllImport("user32")] private static extern bool HideCaret(IntPtr hWnd); 
     public void HideCaret(){ HideCaret(MyTextBox.Handle);}
    2) crééer une toute petite picturebox horiziontale (ou un panel) en avant plan de la textbox pour figurer la barre horizontale,
    3) gérer les events keyUp KeyDown mouseUp et mouse down pour récupérer le SelectionStart et ainsi déplacer hrizontalement la pictureBox ou le panel, le décalage horizontal dépendant de la Width rendue par une fonction TextRenderer.MeasureText du texte en début de TextBox jusqu'àu selectionStart.

    Attention, pour que ça fonctionne la TextBox doit être suffisament large pour afficher tout le texte entré par l'utilisateur : utiliser la propriété MaxLength de la TextBox.Sinon utiliser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MyTextBox.GetRectFromCharacterIndex(MyTextBox.SelectionStart)

  3. #3
    Membre très actif
    Inscrit en
    Février 2011
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 106
    Par défaut le signe ( | ) ne se cache
    Avec la methode que vous m'avez envoyez le signe ( | ) ne se cahce pas, il reste toujours visible !!

  4. #4
    Expert confirmé Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Par défaut
    En faisant le HideCaret sur l'event Enter de la TextBox , cela fonctionne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    bool CaretHidden = false ;
     
    private void textBox1_Enter(object sender, EventArgs e)
    {
          CaretHidden=CaretHidden || HideCaret(textBox1.Handle) || true ;
    }

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par Graffito Voir le message
    2) crééer une toute petite picturebox horiziontale (ou un panel) en avant plan de la textbox pour figurer la barre horizontale,
    Pourquoi une PictureBox ? Ce n'est pas très adapté, il vaudrait mieux gérer l'évènement Paint de la TextBox pour dessiner le trait à l'endroit voulu.

    Sinon cette ligne n'a pas beaucoup de sens :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CaretHidden=CaretHidden || HideCaret(textBox1.Handle) || true ;
    || true fait que le résultat sera toujours true...
    Et même sans ça, en faisant le OU avec la valeur actuelle de CaretHidden, ça fait qu'une fois que CaretHidden vaut true il ne repassera plus jamais à false

    EDIT: j'ai fait le test ; chez moi ça ne marche pas sur l'évènement Enter, par contre ça marche sur GotFocus.

  6. #6
    Expert confirmé Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Par défaut
    || true fait que le résultat sera toujours true...

    Ca parait bizarre comme écriture, mais c'est intentionnel et necessaire :
    • je ne voulais faire le HideCaret() qu'une seule fois, car j'ai lu que les appels s'empilaient et que pour revenir à la situation initiale il fallait autant de ShowCaret() que de HideCaret(),
    • dans mes tests, le HideCaret me renvoyait false, même quand il faisait ce qu'on lui demandait.
    il vaudrait mieux gérer l'évènement Paint de la TextBox pour dessiner le trait à l'endroit voulu.
    C'était aussi ma première idée, mais pas d'event Paint ou d'équivalent pour une TextBox Winforms .

Discussions similaires

  1. Créer une fenêtre flottante qui ne peut avoir le focus
    Par BestofMac dans le forum Composants VCL
    Réponses: 4
    Dernier message: 17/07/2002, 10h46
  2. Format d'un exe pour DOS et pour Windows
    Par Alfhiger dans le forum Assembleur
    Réponses: 4
    Dernier message: 12/06/2002, 11h57
  3. lire une image au format RAW
    Par Anonymous dans le forum OpenGL
    Réponses: 5
    Dernier message: 20/05/2002, 00h11
  4. Réponses: 3
    Dernier message: 06/05/2002, 18h24
  5. focus en C
    Par killpilot dans le forum C
    Réponses: 8
    Dernier message: 19/04/2002, 19h19

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