2010-01-06 14 views
2

Je travaille sur un projet dans lequel j'utilise textbox comme terminal Telnet. Le terminal a "->" comme invite de commande dans la zone de texte. Y at-il un moyen de désactiver la suppression ou retour arrière une fois qu'il atteint l'invite "->"?Question de suppression de la zone de texte C#

Je ne souhaite pas supprimer l'invite de commande.

Merci

+0

Définissez e.SuppressKeyPress = true dans le gestionnaire d'événements KeyDown. Maniez-vous les touches fléchées? –

+0

Je ne gère pas les touches fléchées maintenant. – user195678

Répondre

2

Deux options:

  1. Effectuez les invite ("->") une image ou une étiquette, au lieu d'être une partie de la zone de texte.
  2. S'il s'agit d'une application Web, gérez l'événement textchanged dans javascript et annulez le textchanged s'il représente une suppression de l'invite. Si ce n'est pas une application web, faites la même chose dans C# plutôt que JS.
4

Dave a raison.

La meilleure façon d'y parvenir est de créer une étiquette sur le côté gauche de la zone de texte qui indique ->. Vous pouvez supprimer la bordure de la zone de texte et les placer dans une zone blanche (ou non blanche) pour lui donner une apparence réelle.

Ce sera beaucoup plus facile pour vous de développer et de maintenir, et sera également plus convivial. (Par exemple, la touche Home se comportera mieux)

+1

+1 - En dehors de la clé d'accueil, pensez également à l'interaction de la souris, par exemple en sélectionnant tout le texte, puis en collant quelque chose dans le presse-papiers et d'autres actions similaires. –

+0

Pourquoi le côté droit? L'invite n'apparaît-elle pas toujours au début d'une ligne qui se trouve sur le côté gauche? Nous devons également mettre à jour la position de l'étiquette en tant que plus de données venant de la prise telnet? – user195678

+0

Je voulais dire le côté gauche; Pardon. Avez-vous une seule zone de texte multiligne qui inclut à la fois l'invite et les données entrantes? – SLaks

0

Vous pouvez toujours faire en sorte que lors de la suppression, l'indice du caractère vous supprimez est> 1 (depuis -> occuperaient positions 0 & 1)

+1

cela aura des problèmes si quelqu'un ajoute des caractères avant l'invite – wprl

+1

True, je suppose que je supposais qu'aucun caractère ne serait autorisé là. Le meilleur choix est de faire une étiquette. – taylonr

0

Ceci est un exemple naïf, mais vous devriez être capable de le comprendre à partir d'ici. Vous pouvez faire un pic à l'événement de clavier et l'annuler, si vous le souhaitez.

private void testTextBox_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.KeyCode == Keys.Back && testTextBox.SelectionStart == 2) 
    { 
     e.SuppressKeyPress = true; 
    } 
} 
+2

Il y a tellement de casse-coin à prendre en compte ici que je ne pense pas que ça en vaille la peine. Quelques exemples: CTRL + A suivi de DEL, clic droit -> Sélectionner tout, puis clic droit -> Supprimer, les commandes couper/coller, et ainsi de suite. La liste peut être faite assez longtemps ... –

Questions connexes