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.
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.
Oops, impossible à priori !
Il existe éventuellement une solution acrobatique.
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,
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);}
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
Avec la methode que vous m'avez envoyez le signe ( | ) ne se cahce pas, il reste toujours visible !!
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
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 :
|| true fait que le résultat sera toujours true...
Code : Sélectionner tout - Visualiser dans une fenêtre à part CaretHidden=CaretHidden || HideCaret(textBox1.Handle) || 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.
Pas de questions techniques par MP ! Le forum est là pour ça...
Tutoriels : Les nouveautés de C# 6 - Accès aux données avec Dapper - Extraction de données de pages web à l'aide de HTML Agility Pack - La sérialisation XML avec .NET (Aller plus loin) - Les markup extensions en WPF
|| 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.
C'était aussi ma première idée, mais pas d'event Paint ou d'équivalent pour une TextBox Winforms .il vaudrait mieux gérer l'évènement Paint de la TextBox pour dessiner le trait à l'endroit voulu.
" Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson
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; }
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.
Pas de questions techniques par MP ! Le forum est là pour ça...
Tutoriels : Les nouveautés de C# 6 - Accès aux données avec Dapper - Extraction de données de pages web à l'aide de HTML Agility Pack - La sérialisation XML avec .NET (Aller plus loin) - Les markup extensions en WPF
+1, dans mon code j'écris comme tu l'indiques (et surtout pas l'instuction que j'avais proposée pour le fun).Mouais... dans ce cas je l'aurais écrit comme ça, c'est plus lisible :
" Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson
les solutions ne marchent pas !
Lesquelles : 1, 2 ou 3 ?les solutions ne marchent pas !
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
je n'arrive pas a cacher la barre ( | )
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
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager