Программно изменить фокус для TextBox в C # - PullRequest
0 голосов
/ 10 января 2012

У меня есть класс, полученный из TextBox в C #.Я переопределить метод OnClick, чтобы показать диалог открытия файла.Можно ли после этого потерять фокус?Я не хочу, чтобы пользователь мог редактировать текст, потому что в данный момент имя файла может быть недействительным.Я попытался установить ReadOnly = true, но после выбора файла можно изменить текст.

РЕДАКТИРОВАТЬ:

Я добавил соответствующий код для этого.Как сейчас, фокус будет установлен на следующий элемент управления из моей формы.

class Property : TextBox
class FileSelectTextBox : Property
{
    protected override void OnClick(EventArgs e)
    {
        OpenFileDialog dialog = new OpenFileDialog();
        Enabled = false;
        if (dialog.ShowDialog(this) == DialogResult.OK)
        {
            Text = dialog.FileName;
        }
        Enabled = true;
    }
}

Ответы [ 2 ]

1 голос
/ 10 января 2012

У вас есть несколько вариантов здесь:

  1. Сделать текстовое поле ReadOnly. Текстовое поле будет по-прежнему запускать события OnClick, но текст не будет редактироваться пользователем.
  2. Отключите текстовое поле в конце события щелчка - недостатком является то, что событие щелчка не сработает во второй раз (это означает, что пользователь не сможет передумать и выбрать новый файл).
  3. Просто установите фокус в другом месте в конце события щелчка. (* 1 010 *)

Редактировать: После последнего предложения: вы можете захотеть, чтобы всплывающее окно вашего файла происходило в FocusGained, а не OnClick, тогда диалоговое окно все равно будет всплывать, если пользователь перейдет в контроль. Конечно, это ваше решение, если это поведение является желательным или нет.

Редактировать 2: Игнорировать это последнее редактирование. Это плохое предположение, что я не продумал. (Спасибо за хедз-ап комментатор)

0 голосов
/ 10 января 2012

установите свойство ReadOnly = true текстового поля (не изменяйте его в любой момент времени), и оно должно работать в одиночку.

и остальная часть кода выглядит следующим образом ..

    protected override void OnClick(EventArgs e)
        OpenFileDialog dialog = new OpenFileDialog();

        //user can still change/edit some non-existing file/path and click OK, so set the followings
        dialog.CheckFileExists = true;
        dialog.CheckPathExists = true;

        if (dialog.ShowDialog(this) == DialogResult.OK)
        {
            Text= dialog.FileName;
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...