2009-01-22 6 views
-1

J'ai une zone de texte multiligne et un bouton en dessous.WinForms Multiline Textbox, La touche Entrée permet de déplacer le focus hors de la zone de texte

VB.NET, WinForms, .NET 2.0

System.Windows.Forms.TextBox

multiligne = True

AcceptsReturn = True

AcceptsTab = False

CausesValidation = Faux

Aucun événement s explicitement codé.

Je voudrais que la touche Entrée insère des sauts de ligne et ne déplace jamais le focus sur le contrôle suivant (le bouton). Je souhaite que la touche de tabulation déplace toujours le focus sur le contrôle suivant dans l'ordre des onglets (le bouton).

Ce qui se produit à la place, c'est que la touche Entrée insère un saut de ligne, puis déplace le focus sur le contrôle suivant (le bouton). Il le fait aussi avec Ctrl-Enter, ce qui me déconcerte vraiment! En lisant les fichiers d'aide et en faisant une recherche approfondie sur Google, cela devrait fonctionner comme je le souhaite. Mais évidemment, il me manque quelque chose. Qu'est-ce que je fais mal?

+0

Je voudrais voir ce projet, qui est bizarre. Postez-le sur un service de partage de fichiers. –

+0

Avez-vous hérité d'un formulaire personnalisé? Peut-être que le processus de forme de base Entrez la touche pour mettre au point le prochain contrôle –

Répondre

0

se trouve que je l'avais oublié que je l'avais fait cela (ci-dessous) ailleurs sur la même forme:

'http://duncanmackenzie.net/blog/Enter-Instead-of-Tab/default.aspx 
Protected Overrides Sub OnKeyUp(ByVal e As System.Windows.Forms.KeyEventArgs) 
    If e.KeyCode = Keys.Enter Then 
     e.Handled = True 
     Me.ProcessTabKey(Not e.Shift) 
    Else 
     e.Handled = False 
     MyBase.OnKeyUp(e) 
    End If 
End Sub 
0

Il ne devrait certainement pas faire cela. La seule chose que je peux penser est qu'il n'y a pas assez de hauteur pour accueillir plusieurs lignes. Essayez d'ajouter ...

textBox1.ScrollBars = ScrollBars.Vertical 

Si non, je ne sais pas. Essayez de créer un projet vide et créer un formulaire avec une zone de texte, un bouton définir les propriétés et voir ce qui se passe ...

2

Une méthode que j'utilise souvent pour ce genre de problème est d'ajouter et de soustraire itérativement le code jusqu'à ce que je puisse réduire à la seule chose qui a causé le problème. Par exemple, vous pouvez commencer par créer un projet très simple avec une seule boîte d'édition et un autre contrôle, et voir ce qu'il fait. Si ce code se comporte comme vous le souhaitez, vous pouvez commencer à ajouter du code petit à petit, en rapprochant le projet simple du produit final souhaité, jusqu'à ce que le bogue apparaisse. Ensuite, regardez le dernier bit de code que vous avez ajouté, et voyez si vous pouvez en soustraire des bits jusqu'à ce que le bogue disparaisse. Itérer quelques fois pourrait vous aider à trouver le coupable. Alternativement, vous pouvez commencer avec votre code existant (se comporter mal), et commencer à le simplifier jusqu'à ce que le bogue disparaisse. Ensuite, vous ajoutez une partie de la dernière chose que vous avez supprimée, et recommencez comme ci-dessus. Enfin, dans ce cas, vous pouvez également essayer d'ajouter un gestionnaire d'événements pour l'événement Leave du contrôle d'édition et placer un point d'arrêt dans le gestionnaire. Lorsque le BP arrive, vérifiez la callstack et voyez si vous pouvez avoir une idée du code qui a précipité le changement de focus. Pour que cela fonctionne, votre débogueur devra probablement être configuré pour afficher le code pour lequel vous n'avez pas de source (c'est-à-dire désactiver l'option Just My Code dans le débogueur). Vous pouvez même coller une callstack (tronquée) dans la question si vous voulez obtenir l'aide du groupe pour le déchiffrer.

p.s. Est-ce que quelqu'un a un nom pour la méthode de débogage itérative décrite ci-dessus? Sinon, pourrais-je proposer de l'appeler la méthode de Newton (ou peut-être Newtoning), puisqu'elle ressemble à la méthode de Newton pour trouver itérativement les racines des fonctions mathématiques.

+0

Oui! Trouvé en vérifiant la pile d'appels. Merci. –

Questions connexes