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

  1. #1
    Membre à l'essai
    Inscrit en
    Février 2011
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 106
    Points : 14
    Points
    14
    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 éminent 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
    Points : 7 903
    Points
    7 903
    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)
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

  3. #3
    Membre à l'essai
    Inscrit en
    Février 2011
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 106
    Points : 14
    Points
    14
    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 éminent 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
    Points : 7 903
    Points
    7 903
    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 ;
    }
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

  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 : 42
    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
    Points : 39 749
    Points
    39 749
    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 éminent 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
    Points : 7 903
    Points
    7 903
    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 .
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

  7. #7
    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 : 42
    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
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par Graffito Voir le message
    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.
    Mouais... dans ce cas je l'aurais écrit comme ça, c'est plus lisible :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if (!CaretHidden)
    {
        HideCaret();
        CaretHidden = true;
    }

    Citation Envoyé par Graffito Voir le message
    C'était aussi ma première idée, mais pas d'event Paint ou d'équivalent pour une TextBox Winforms .
    Ah oui c'est vrai... en fait l'évènement existe, mais il est masqué car il n'est pas utilisé, vu que c'est l'OS qui dessine le contrôle.

  8. #8
    Expert éminent 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
    Points : 7 903
    Points
    7 903
    Par défaut
    Mouais... dans ce cas je l'aurais écrit comme ça, c'est plus lisible :
    +1, dans mon code j'écris comme tu l'indiques (et surtout pas l'instuction que j'avais proposée pour le fun).
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

  9. #9
    Membre à l'essai
    Inscrit en
    Février 2011
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 106
    Points : 14
    Points
    14
    Par défaut
    les solutions ne marchent pas !

  10. #10
    Expert éminent 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
    Points : 7 903
    Points
    7 903
    Par défaut
    les solutions ne marchent pas !
    Lesquelles : 1, 2 ou 3 ?
    Graffito :
    1) cacher le Caret (la barre verticale)
    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.
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

  11. #11
    Membre à l'essai
    Inscrit en
    Février 2011
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 106
    Points : 14
    Points
    14
    Par défaut
    je n'arrive pas a cacher la barre ( | )

  12. #12
    Expert éminent 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
    Points : 7 903
    Points
    7 903
    Par défaut
    As-tu tenu compte de la remarque de tomlev :
    EDIT: j'ai fait le test ; chez moi ça ne marche pas sur l'évènement Enter, par contre ça marche sur GotFocus.
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

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