Vous pourriez utiliser une RichTextBox à la place, elle permet de protéger le texte :
public Form1() {
InitializeComponent();
richTextBox1.Text = "http://";
richTextBox1.SelectAll();
richTextBox1.SelectionProtected = true;
richTextBox1.SelectionStart = richTextBox1.Text.Length;
richTextBox1.DetectUrls = false; // optional
}
Mais malheureusement, il ne fonctionne pas bien si vous définissez sa propriété Multiline sur False.
Une façon pragmatique de le faire avec une TextBox est de la remettre comme vous le souhaitez. Cela fonctionne également avec les collages et les suppressions de sélection :
string protect = "http://";
private void textBox1_TextChanged(object sender, EventArgs e) {
if (!textBox1.Text.StartsWith(protect)) {
textBox1.Text = protect;
textBox1.SelectionStart = textBox1.Text.Length;
}
}
48 votes
La solution la plus simple serait de placer simplement le "http://" dans une étiquette avant la zone de texte.
0 votes
Mettez une autre zone de texte à côté et faites en sorte qu'elle soit en lecture seule, mais mettez-les ensemble pour qu'elles aient l'air d'en former une seule. Puis joignez les chaînes dans le code ?
0 votes
Je le sais, mais pour une raison quelconque, je veux l'utiliser comme ça !
2 votes
Lier un événement de pression de touche ; tester la longueur du champ de texte ; si <= 7, renvoyer false à l'événement de touche et ainsi ignorer l'événement de retour arrière.
7 votes
@Ismael, ça ne marchera pas. Ils pourraient taper un tas de texte et ensuite changer la partie http:// sans que votre code ne se déclenche parce qu'il serait plus long que 7.
2 votes
@Ismael Cela ne t'empêche pas de changer le
http://
à condition qu'elle comporte plus de 7 caractères.2 votes
Il est malheureusement impossible de rendre une partie d'une zone de texte en lecture seule.
0 votes
@Doomsknight maintenant je suis d'accord avec vous. Mais vous pouvez gérer cela en javascript pour toujours forcer http:// comme premiers caractères, juste quelques IFs.
1 votes
Veuillez confirmer qu'il s'agit d'une application winforms, vous semblez avoir confondu quelques uns des posters.
0 votes
@musefan - Peu importe qu'il s'agisse d'une application de bureau ou web, le conseil est le même. Mon conseil est de leur permettre de supprimer tout ce qu'ils veulent. Lorsque le curseur quitte la zone de texte, il suffit d'attacher l'option
http://
à la chaîne de caractères.0 votes
@Ramhound : C'est important quand il y a des gens qui postent avec du code html pour tenter de répondre. Et même une réponse basée sur la théorie devrait prendre en compte les fonctions/événements réellement disponibles.
1 votes
Je recommande d'utiliser un espace réservé qui dit http:// et ensuite faire un contrôle d'intégrité et ajouter http:// s'il n'existe pas. De nombreux navigateurs modernes incluent le protocole lors de la copie de l'URL, de sorte que votre méthode n'est peut-être pas aussi fluide que vous le pensiez.
0 votes
Le problème de l'utilisation d'un champ de texte ou d'une étiquette séparés est que l'utilisateur ne pourra pas coller une URL dans le champ de texte sans se retrouver avec le message suivant
http://http://
9 votes
Êtes-vous totalement sûr que l'URL saisie ne pouvait pas commencer par un autre schéma ? Par exemple, "https://"
0 votes
C'est important, car cela permet de refuser un changement de protocole et d'ignorer les URL relatives.
0 votes
Vous pouvez simuler cela en définissant que la touche mouseDown doit aller à la position 7 dans le champ. La touche left arrow nav ne doit pas vous permettre d'aller à gauche de la position 7. Etc.
0 votes
Un autre système que je vois sur pas mal de sites est qu'ils ont "http://" dans la zone de texte, quand vous cliquez dessus, il disparaît (un placeholder), signalant que l'utilisateur n'a pas besoin de le taper. Mais cette approche ne semble pas très conviviale.