Как удалить фокус из TextBox в WinForms?

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

textBox1.Focused = false;

Свойство свойства ReadOnly true.

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

this.Focus();

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

Итак, как удалить фокус из TextBox?

Ответ 1

Для перемещения фокуса вам понадобится другой настраиваемый элемент управления.

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

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

Ответ 2

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

private void Form1_Load(object sender, EventArgs e)  
{ 
  this.ActiveControl = label1;       
}

Ответ 3

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

Ответ 4

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

this.ActiveControl = null;  //this = form

Ответ 5

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

ActiveControl = null;

Ответ 6

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

Ответ 7

попробуйте этот.

сначала настройте порядок вкладок.

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

в форме load даже напишите эту строку.

SendKeys.Send("{TAB}");

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

Ответ 8

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

ActiveControl = null;

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

Ответ 9

Я нашел хорошую альтернативу! Он работает лучше всего для меня, не сосредотачиваясь на чем-то другом.

Попробуйте следующее:

private void richTextBox_KeyDown(object sender, KeyEventArgs e)
{    
    e.SuppressKeyPress = true;
}

Ответ 10

Кажется, что мне не нужно фокусировать внимание на каких-либо других элементах. В приложении 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

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

Ответ 11

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

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);
    }
}

Ответ 12

Я сделал это на своем пользовательском контроле, я сделал это onFocus()

this.Parent.Focus();

Итак, если texbox сфокусирован - он мгновенно фокусирует текстовое поле родителя (форму или панель...) Это хороший вариант, если вы хотите сделать это на настраиваемом элементе управления.

Ответ 13

    //using System;
    //using System.Collections.Generic;
    //using System.Linq;

    private void Form1_Load(object sender, EventArgs e)
    {
        FocusOnOtherControl(Controls.Cast<Control>(), button1);
    }

    private void FocusOnOtherControl<T>(IEnumerable<T> controls, Control focusOnMe) where T : Control
    {
        foreach (var control in controls)
        {
            if (control.GetType().Equals(typeof(TextBox)))
            {
                control.TabStop = false;
                control.LostFocus += new EventHandler((object sender, EventArgs e) =>
                {                     
                    focusOnMe.Focus();
                });
            }
        }
    }

Ответ 14

Как мне обойти это, нужно поместить все мои элементы управления winform. Я делаю все метки и не выбираю элементы управления winform как порядок вкладок 0, затем мой первый элемент управления как порядок вкладок 2, а затем увеличиваю каждый выбираемый порядок управления на 1, так что 3, 4, 5 и т.д.

Таким образом, когда мои Winforms запускаются, первый TextBox не имеет фокуса!

Ответ 15

вы можете сделать это двумя способами

  • просто измените свойства "TabStop" желаемого текстового поля на false, теперь он не будет сфокусирован, даже если у вас есть одно текстовое поле
  • перетащите два текстовых поля

    • сделать видимым, на котором вы не хотите foucus, который является textbox1
    • сделать второй невидимым и перейти к свойствам этого текстового поля и выбрать

Значение tabindex до 0 текстового поля2

  1. и выберите tabindex вашего текстового поля 1 в 1 теперь он не будет сфокусирован на textbox1

Ответ 16

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

textBox_Log.SelectionStart = 0;
textBox_Log.SelectionLength = 0;
textBox_Log.Select();

После этого при добавлении содержимого с помощью .Text += "..." синий цвет не будет показан.

Ответ 17

Попробуйте установить TabStop на False для управления вашим видом, которое не фокусируется.

Например,

txtEmpID.TabStop = false;