Мне нужно удалить фокус из нескольких текстовых полей. Я попытался использовать:
textBox1.Focused = false;
Свойство свойства ReadOnly
true
.
Затем я попытался установить фокус на форме, чтобы удалить ее из всех текстовых полей, но это также не работает:
this.Focus();
и функция возвращает false
при выборе текстового поля.
Итак, как удалить фокус из TextBox?
Для перемещения фокуса вам понадобится другой настраиваемый элемент управления.
Обратите внимание, что вы можете установить Focus на метку. Возможно, вам захочется рассмотреть, куда вы хотите, чтобы клавиша [Tab] приняла следующий код.
Также обратите внимание, что вы не можете установить его в форму. Контейнерные элементы управления, такие как Form и Panel, передают Focus на свой первый дочерний элемент управления. Который может быть TextBox, в котором вы хотели, чтобы он ушел.
Сосредоточение внимания на ярлыке не сработало для меня, сделав что-то вроде label1.Focus()
правильно?
текстовое поле по-прежнему имеет фокус при загрузке формы, однако пытается Velociraptors
ответ, работал у меня, установив элемент управления Active Active на ярлык следующим образом:
private void Form1_Load(object sender, EventArgs e)
{
this.ActiveControl = label1;
}
this.ActiveControl = panelOnMyForm;
Попробуйте отключить и включить текстовое поле.
Вы можете добавить следующий код:
this.ActiveControl = null; //this = form
Вы также можете установить для форм activecontrol
свойство null
как
ActiveControl = null;
Focus
устанавливает фокус ввода, поэтому установка его в форму не будет работать, потому что формы не принимают входные данные. Попробуйте изменить свойство формы ActiveControl
на другой элемент управления. Вы также можете использовать Select
для выбора определенного элемента управления или SelectNextControl
, чтобы выбрать следующий элемент управления в порядке табуляции.
Select()
работал на меня.
попробуйте этот.
сначала настройте порядок вкладок.
то в событии загрузки формы мы можем отправить ключ табуляции программно в приложение. так что приложение будет сосредоточено на 1-м контуле в порядке вкладок.
в форме load даже напишите эту строку.
SendKeys.Send("{TAB}");
это работало для меня.
Этот пост заставил меня сделать это:
ActiveControl = null;
Это позволяет мне захватывать все входные данные клавиатуры на верхнем уровне, без использования других элементов управления.
Простым решением было бы убить фокус, просто создайте свой собственный класс:
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);
}
}
Кажется, что мне не нужно фокусировать внимание на каких-либо других элементах. В приложении 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
Это сработало для меня, но я не знаю, почему это не сработало для вас:/
Я нашел хорошую альтернативу! Он работает лучше всего для меня, не сосредотачиваясь на чем-то другом.
Попробуйте следующее:
private void richTextBox_KeyDown(object sender, KeyEventArgs e)
{
e.SuppressKeyPress = true;
}
Я сделал это на своем пользовательском контроле, я сделал это onFocus()
this.Parent.Focus();
Итак, если texbox сфокусирован - он мгновенно фокусирует текстовое поле родителя (форму или панель...) Это хороший вариант, если вы хотите сделать это на настраиваемом элементе управления.
вы можете сделать это двумя способами
перетащите два текстовых поля
Значение tabindex до 0 текстового поля2
Как мне обойти это, нужно поместить все мои элементы управления winform. Я делаю все метки и не выбираю элементы управления winform как порядок вкладок 0, затем мой первый элемент управления как порядок вкладок 2, а затем увеличиваю каждый выбираемый порядок управления на 1, так что 3, 4, 5 и т.д.
Таким образом, когда мои Winforms запускаются, первый TextBox не имеет фокуса!
//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();
});
}
}
}
Попробуйте установить TabStop
на False
для управления вашим видом, которое не фокусируется.
Например,
txtEmpID.TabStop = false;
Если все, что вам нужно, это оптический эффект, при котором текстовое поле не имеет синего выделения по всему его содержимому, просто выберите текст:
textBox_Log.SelectionStart = 0;
textBox_Log.SelectionLength = 0;
textBox_Log.Select();
После этого при добавлении содержимого с помощью .Text += "..."
синий цвет не будет показан.