Как удалить фокус из текстового поля в WinForms?
мне нужно удалить фокус из нескольких текстовых полей. Я пробовал использовать:
textBox1.Focused = false;
его ReadOnly стоимость имущества составляет true.
затем я попытался установить фокус на форму, чтобы удалить ее из всех текстовых полей, но это также не работает:
this.Focus();
и функция возвращает false при выборе текстового поля.
Итак, как мне удалить фокус из текстового поля?
18 ответов:
вам нужен какой-то другой фокусируемый элемент управления для перемещения фокуса.
обратите внимание, что вы можете установить фокус на этикетку. Возможно, вы захотите рассмотреть, где вы хотите, чтобы ключ [Tab] взял его дальше.
Также обратите внимание, что вы не можете установить его на форму. Контейнерные элементы управления, такие как форма и панель, передадут фокус на свой первый дочерний элемент управления. Это может быть текстовое поле, от которого вы хотите его отодвинуть.
фокусировка на этикетке не сработала для меня, делая что-то вроде
label1.Focus()верно? текстовое поле по-прежнему имеет фокус при загрузке формы, однако попытка велоцирапторы ответ, работал для меня, установив активный элемент управления формы на метку следующим образом:private void Form1_Load(object sender, EventArgs e) { this.ActiveControl = label1; }
Focusустанавливает фокус ввода, поэтому установка его в форму не будет работать, потому что формы не принимают ввод. Попробуйте установить формуActiveControlсвойство для другого элемента управления. Вы также можете использоватьSelectдля выбора конкретного элемента управления илиSelectNextControlдля выбора следующего элемента управления в порядке табуляции.
попробуй это:
Сначала установите порядок вкладок.
затем в случае загрузки формы мы можем отправить нажатие клавиши tab программно в приложение. Так что приложение будет уделять внимание 1-й contol в порядке табуляции.
в форме загрузки даже писать эту строку.
SendKeys.Send("{TAB}");это сработало для меня.
этот пост приведет меня к этому:
ActiveControl = null;Это позволяет мне захватить все ввода с клавиатуры на верхнем уровне без других элементов управления сходит с ума.
Кажется, что мне не нужно устанавливать фокус на какие-либо другие элементы. В приложении 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
это сработало для меня, но я не знаю, почему это не сработало для вас :/
простым решением было бы убить фокус, просто создайте свой собственный класс:
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); } }
Я нашел хорошую альтернативу! Это работает лучше всего для меня, не ставя акцент на чем-то другом.
попробуй это:
private void richTextBox_KeyDown(object sender, KeyEventArgs e) { e.SuppressKeyPress = true; }
Я сделал это на моем пользовательском элементе управления, я сделал это onFocus ()
this.Parent.Focus();Так что если texbox focused-это мгновенно фокус textbox parent (форма или панель...) Это хороший вариант, если вы хотите сделать это на пользовательский элемент управления.
//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(); }); } } }
то, как я обойти это, чтобы разместить все мои элементы управления winform. Я делаю все метки и не выбираю элементы управления winform как порядок табуляции 0, затем мой первый элемент управления как порядок табуляции 2, а затем увеличиваю порядок каждого выбираемого элемента управления на 1, поэтому 3, 4, 5 и т. д...
таким образом, когда мои Winforms запускаются, первое текстовое поле не имеет фокуса!
вы можете сделать это двумя способами
- просто сделайте свойства "TabStop" нужного текстового поля ложными теперь он не будет фокусироваться, даже если у вас есть одно текстовое поле
перетащите два текстовых поля
- сделайте видимым тот, на котором вы не хотите foucus, который является textbox1
- сделайте второй невидимым и перейдите к свойствам этого текстового поля и выберите
tabindex значение 0 из textbox2
- и выберите tabindex вашего textbox1 к 1 теперь он не будет фокусироваться на textbox1
Если все, что вам нужно, это оптический эффект, что текстовое поле не имеет синего выделения по всему его содержимому, просто выберите нет текста:
textBox_Log.SelectionStart = 0; textBox_Log.SelectionLength = 0; textBox_Log.Select();после этого, при добавлении контента с
.Text += "...", синий выбор не будет показан.
пожалуйста, попробуйте установить
TabStoptoFalseдля вашего управления видом, который не фокусируется.например:
txtEmpID.TabStop = false;
в конструкторе формы или UserControl удерживая текстовое поле write
SetStyle(ControlStyles.Selectable, false);после инициализации компонента(); Источник: https://stackoverflow.com/a/4811938/5750078
пример:
public partial class Main : UserControl { public Main() { InitializeComponent(); SetStyle(ControlStyles.Selectable, false); }
Comments