Подавить автоматический выбор текстового поля в форме Windows Forms. Show () - PullRequest
0 голосов
/ 17 февраля 2010

У меня есть приложение, в котором я пытаюсь имитировать текстовые поля «мягкого описания», подобные тем, которые найдены для тегов и местоположений заголовков на этом сайте.

Способ, которым я это сделал, по сути, заключается в создании моего текстового поля, и в зависимости от того, что происходит, когда указатель мыши входит или покидает элемент управления, обновляет содержимое текстового поля, чтобы получить эффект.

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

Если я отключу AcceptTab для текстового поля, то все будет работать как положено, но пользователь теряет возможность вкладки в текстовое поле.

Есть ли способ отключить этот автоматический выбор текстового поля?

Ответы [ 4 ]

2 голосов
/ 09 января 2018

Немного поздно, но идеальным решением является выбор формы при загрузке формы.

Добавление этой строки в конструктор даст ожидаемый результат.

this.Select();

Но при использовании многопоточных элементов управления, таких как OpenFileDialog, если вы хотите расфокусировать / отменить выделение текстового поля this.Select () не работало, поэтому я выбрал кнопку в форме, используя.

button1.Select();
2 голосов
/ 17 февраля 2010

Не могли бы вы сделать это. Фокус () на самой форме или на каком-либо элементе управления надписью?

0 голосов
/ 18 февраля 2010

Я использовал вариант по технике Джейсона.Сначала я создал фиктивное текстовое поле с tabindex 0. Таким образом, когда форма отображается, это текстовое поле будет выделено.Затем я установил пустое текстовое поле нулевой ширины, чтобы оно не имело видимого компонента.

Однако после загрузки формы я не хочу, чтобы пользователь мог переходить на «несуществующий»" текстовое окно.Поэтому я добавил эти два бита:

    //These functions prevent the textboxes from being implicitly selected.
    private void dummyBox_Leave(object sender, EventArgs e)
    {
        dummyBox.TabStop = false;
    }

    private void Main_Enter(object sender, EventArgs e)
    {
        dummyBox.TabStop = true;
        dummyBox.Select();
    }

Где Main - это имя моей формы.

Надеюсь, это кому-нибудь поможет.

Billy3

0 голосов
/ 17 февраля 2010

Свойство TabIndex контролирует порядок размещения элементов, а при загрузке фокус переходит к первому элементу управления (упорядоченному TabIndex), для которого AcceptTab имеет значение true.Вы можете изменить порядок так, чтобы элемент управления, в котором вы хотите, чтобы фокус пользователя запускался, был наименьшим (и имел бы рабочий цикл вкладок с элементами управления, как вы ожидаете).

В качестве альтернативы, как предположил Джейсон, вы могли бы простовызовите Focus () для любого элемента управления или самой формы в событии FormLoad.

...