it-swarm.com.ru

Как убрать фокус из TextBox в WinForms?

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

textBox1.Focused = false;

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

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

this.Focus();

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

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

102
Callum Rogers

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

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

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

105
Henk Holterman

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

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

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

this.ActiveControl = null;  //this = form
37
FTheGodfather

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

31
Spencer Ruport

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

ActiveControl = null;
19
marcigo36

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

8
Velociraptors

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

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

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

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

SendKeys.Send("{TAB}");

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

7
charith rasanga

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

ActiveControl = null;

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

4
Kristopher Ives

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

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

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

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

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

2
Bhawk1990

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

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
VladL

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

this.Parent.Focus();

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

2
Tommix
    //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();
                });
            }
        }
    }
1
Torus

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

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

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

0
Roland

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

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

0
CosineCuber

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

Например:

txtEmpID.TabStop = false;
0
Shaheer

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

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

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

значение tabindex до 0 из textbox2

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