S'il vous plaît permettez-moi d'expliquer ce que j'ai et ce que j'essaie d'atteindre.Comment limiter un événement textchanged pour une zone de texte à une entrée au clavier uniquement?
J'ai une zone de texte (appelée txtb1) et un bouton en dessous (appelé btn_browse) sur un winform dans un projet vb.net.
Lorsque l'utilisateur clique sur le bouton, une boîte de dialogue de navigateur de dossier apparaît. L'utilisateur sélectionne son dossier désiré et lorsqu'il clique sur 'OK', la boîte de dialogue se ferme et le chemin du dossier sélectionné apparaît dans la zone de texte. Je veux également stocker cette valeur dans une variable à utiliser ailleurs (la valeur sera copiée dans un fichier xml lorsque l'utilisateur cliquera sur 'apply' sur le formulaire, mais cela n'a aucun effet et n'est pas lié à mon problème).
Pour que j'ai le code suivant:
Public myVar As String
Private Sub btn_browse_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_browse.Click
Dim f As New FolderBrowserDialog
If f.ShowDialog() = DialogResult.OK Then
txtb1.Text = f.SelectedPath
End If
myVar = txtb1.text
f.Dispose()
End Sub
Cette partie fonctionne sans problème.
Maintenant, que faire si l'utilisateur: 1- décide d'entrer le chemin manuellement plutôt que d'utiliser le bouton de navigation. ou, 2 après avoir utilisé le bouton de navigation et sélectionner le dossier, ils décident de changer manuellement l'emplacement
En essayant de résoudre ce que j'ajouté un événement TextChanged à la zone de texte comme suit:
Private Sub txtb1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtb1.TextChanged
myVar = txtb1.Text
End Sub
Cependant, cela ne fonctionne pas. Apparemment, et je ne sais pas si cela est pertinent, lorsque l'utilisateur sélectionne le dossier désiré en utilisant le bouton de navigation, l'événement textchanged est également déclenché. et quand je clique sur la zone de texte (pour la mettre au point) et que j'appuie sur n'importe quelle touche du clavier, l'application cesse de répondre.
Donc, mes questions sont: est-ce que je vais à ce sujet de la bonne façon? Si ma logique est imparfaite, quelqu'un pourrait-il m'indiquer à quel point une telle chose pourrait être atteinte? est-il possible de limiter les événements déclencheurs à la seule saisie du clavier pour contourner cela? J'ai essayé les événements keydown et keypress mais je reçois le gel. Pourquoi avez-vous besoin de stocker cette valeur dans une variable supplémentaire?
vous remercie tous pour votre réponse.Comme ANC_Michael et Raja l'ont suggéré, j'ai défini la propriété textbox en lecture seule. Merci Raja pour la réponse claire et merci ANC_Michael pour les suggestions backcolor et forecolor. – mazrabul