Как я могу ограничить текстовое событие для текстового поля только вводом с клавиатуры? - PullRequest
0 голосов
/ 07 мая 2010

Пожалуйста, позвольте мне объяснить, что у меня есть и чего я пытаюсь достичь.

У меня есть текстовое поле (называемое txtb1) и кнопка под ним (называемая btn_browse) на winform в vb.net.проект.

Когда пользователь нажимает кнопку, появляется диалоговое окно браузера папок.Пользователь выбирает желаемую папку, и когда он / она нажимает «ОК», диалоговое окно закрывается, и путь к выбранной папке появляется в текстовом поле.Я также хочу сохранить это значение в переменной, которая будет использоваться где-то еще (значение будет скопировано в XML-файл, когда пользователь нажмет «применить» на форме, но это не имеет никакого эффекта и не связано с моей проблемой).

Для этого у меня есть следующий код:

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

Эта часть работает без проблем.

Теперь, что если пользователь либо: 1- решит ввестипуть, а не использовать кнопку обзора.или 2- после использования кнопки обзора и выбора папки они решают вручную изменить местоположение

Пытаясь решить эту проблему, я добавил текстовое событие в текстовое поле следующим образом:

Private Sub txtb1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtb1.TextChanged
    myVar = txtb1.Text

End Sub

Однако это не работает.По-видимому, и я не знаю, насколько это актуально, когда пользователь выбирает нужную папку с помощью кнопки обзора, также запускается событие с измененной текстовой информацией.и когда я нажимаю на текстовое поле (чтобы выделить его) и нажимаю любую клавишу клавиатуры, приложение просто перестает отвечать.

Итак, мои вопросы: правильно ли я поступаю?если моя логика ошибочна, может ли кто-нибудь указать мне, как обычно такая вещь может быть достигнута?Можно ли ограничить инициирующие события только вводом с клавиатуры, чтобы обойти это?Я пробовал события нажатия клавиш и нажатия клавиш, но я получаю остановку.

Ответы [ 3 ]

1 голос
/ 07 мая 2010

Установите для свойства TextBox.ReadOnly значение true, а затем установите задний цвет на белый и передний цвет на черный, чтобы они выглядели как обычное текстовое поле, но они не могут его редактировать.

Тогда вам не нужно беспокоиться об обработке каких-либо событий из текстового поля, как вы делаете.

1 голос
/ 07 мая 2010

Я думаю, что ваше решение довольно простое. Просто обработайте текстовое поле как элемент управления загрузкой файлов в веб-формах. Сделайте это только для чтения. Не позволяйте пользователям редактировать текст. Это решает две проблемы:

  1. Пользователь всегда выбирает папку, используя известный механизм (нажав на кнопку и выбирая папку)
  2. Нет необходимости использовать какую-либо переменную, поскольку вы всегда можете получить местоположение из текстового поля.

НТН

0 голосов
/ 07 мая 2010

Зачем вам нужно хранить это значение в дополнительной переменной?Пока текстовое поле является видимым для пользователя, оно содержит определенное значение и может быть доступно напрямую.Таким образом, в этом случае вам нужно будет нажать кнопку «Применить», чтобы прочитать значение из текстового поля вместо переменной, что позволит полностью избежать этой проблемы с событиями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...