Как убрать фокус из TextBox в WinForms? - PullRequest
102 голосов
/ 17 июля 2009

Мне нужно убрать фокус из нескольких текстовых полей. Я пытался использовать:

textBox1.Focused = false;

Его ReadOnly значение свойства равно true.

Затем я попытался установить фокус на форме, чтобы удалить его из всех текстовых полей, но это также не работает:

this.Focus();

и функция возвращает false при выделении текстового поля.

Итак, как мне убрать фокус из TextBox?

Ответы [ 18 ]

105 голосов
/ 17 июля 2009

Вам нужен какой-то другой фокусируемый элемент управления, чтобы переместить фокус на.

Обратите внимание, что вы можете установить фокус на метку. Возможно, вы захотите подумать, где вы хотите, чтобы клавиша [Tab] взяла его дальше.

Также обратите внимание, что вы не можете установить его в форму. Контейнерные элементы управления, такие как Form и Panel, передадут Focus своему первому дочернему элементу управления. Которым может быть TextBox, от которого вы хотели бы отказаться.

57 голосов
/ 07 декабря 2011

Сосредоточиться на этикетке у меня не получилось, сделать что-то вроде label1.Focus() верно? текстовое поле все еще имеет фокус при загрузке формы, однако пытается Velociraptors ответьте, сработало для меня, установив элемент управления Active Form на метку следующим образом:

private void Form1_Load(object sender, EventArgs e)  
{ 
    this.ActiveControl = label1;       
}
37 голосов
/ 25 июня 2014

Вы можете добавить следующий код:

this.ActiveControl = null;  //this = form
31 голосов
/ 17 июля 2009

Попробуйте отключить и включить текстовое поле.

19 голосов
/ 02 января 2014

Вы также можете установить свойство activecontrol форм null как

ActiveControl = null;
8 голосов
/ 17 июля 2009

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

7 голосов
/ 31 мая 2012

Попробуйте это:

Сначала настройте порядок табуляции.

Затем в событии загрузки формы мы можем программно отправить нажатие клавиши табуляции в приложение. Так что приложение будет фокусироваться на первом контроле в порядке табуляции.

в форме загрузки даже написать эту строку.

SendKeys.Send("{TAB}");

Это сработало для меня.

4 голосов
/ 29 марта 2014

Этот пост заставил меня сделать это:

ActiveControl = null;

Это позволяет мне захватить весь ввод с клавиатуры на верхнем уровне без сумасшедших действий других элементов управления.

2 голосов
/ 10 сентября 2013

Простым решением было бы убить фокус, просто создайте свой собственный класс:

public class ViewOnlyTextBox : System.Windows.Forms.TextBox {
    // constants for the message sending
    const int WM_SETFOCUS = 0x0007;
    const int WM_KILLFOCUS = 0x0008;

    protected override void WndProc(ref Message m) {
        if(m.Msg == WM_SETFOCUS) m.Msg = WM_KILLFOCUS;

        base.WndProc (ref m);
    }
}
2 голосов
/ 10 марта 2012

Кажется, мне не нужно фокусироваться на каких-либо других элементах. В приложении для Windows Phone 7 я использовал метод Focus, чтобы сбросить фокус текстового поля.

Если вы введете следующую команду, фокус будет нулевым:

void SearchBox_KeyDown(object sender, System.Windows.Input.KeyEventArgs e)
{
    if (e.Key == Key.Enter)
    {
        Focus();
    }
}

http://msdn.microsoft.com/en-us/library/system.windows.forms.control.focus.aspx

Это сработало для меня, но я не знаю, почему это не сработало для вас: /

...