如何从WinForms中的文本框中移除焦点?
我需要从几个文本框中删除焦点。 我试过使用:
textBox1.Focused = false;
其ReadOnly
属性值为true
。
然后,我尝试将焦点放在窗体上,以便将其从所有文本框中移除,但这也无法工作:
this.Focus();
当select文本框时,函数返回false
。
那么,如何从TextBox中移除焦点呢?
你需要一些其他可调焦的控件来把焦点移到。
请注意,您可以将焦点设置为标签。 你可能想要考虑你想要[Tab]键的位置。
另外请注意,您不能将其设置为表单。 像Form和Panel这样的容器控件将Focus传递给他们的第一个子控件。 这可能是你想让它离开的文本框。
专注于标签不适合我,像label1.Focus()
对吗? 当加载表单时,文本框仍然有焦点,但是尝试Velociraptors回答,为我工作,设置窗体的活动控制到这样的标签:
private void Form1_Load(object sender, EventArgs e) { this.ActiveControl = label1; }
尝试禁用和启用文本框。
你可以添加下面的代码:
this.ActiveControl = null; //this = form
你也可以设置表单的activecontrol
属性为null
ActiveControl = null;
Focus
设置input焦点,所以将其设置为表单将不起作用,因为表单不接受input。 尝试将窗体的ActiveControl
属性设置为不同的控件。 您也可以使用“ Select
select特定的控件或“select下一个控件”以按选项卡顺序select下一个控件。
试试这个..
首先设置标签顺序
然后在表单加载事件我们可以发送一个标签按键编程到应用程序。 以便应用程序将按照Tab键顺序将焦点放在第一个控件上。
在表单加载中甚至写这行。
SendKeys.Send("{TAB}");
这对我有用。
这篇文章引导我这样做:
ActiveControl = null;
这使我可以捕捉到顶级的所有键盘input,而不会有其他控制问题。
看来,我不必把重点放在其他因素上。 在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
它为我工作,但我不知道为什么它不适合你:/
一个简单的解决scheme是杀死焦点,只需创build自己的类:
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); } }
我find了一个很好的select! 它最适合我,不需要把重点放在别的东西上。
尝试一下:
private void richTextBox_KeyDown(object sender, KeyEventArgs e) { e.SuppressKeyPress = true; }
我在我的自定义控件上做了这个,我做了onFocus()
this.Parent.Focus();
所以,如果texbox的重点 – 它立即集中文本框的父(forms,或面板…)这是一个很好的select,如果你想在自定义控制。
//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控件。 我做所有标签和非selectwinform控件为制表订单0,然后我的第一个控制为制表订单2,然后增加每个可选控件的订单1,所以3,4,5等…
这样,当我Winforms启动,第一个文本框没有焦点!
你可以通过两种方法做到这一点
- 只要将所需文本框的“TabStop”属性设置为false,即使只有一个文本字段,它也不会对焦
-
拖动两个文本框
- 让一个可见的你不想要的文本框1
- 使第二个不可见并转到该文本字段的属性并select
tabindex值为0的textbox2
- 并select您的textbox1的tabindex到1,现在它不会集中在textbox1上
如果你想要的只是文本框内没有蓝色select的光学效果,只需select没有文本:
textBox_Log.SelectionStart = 0; textBox_Log.SelectionLength = 0; textBox_Log.Select();
在此之后,当用.Text += "..."
添加内容时,不会显示蓝色select。
请尝试设置TabStop
为False
您的视图控制,这是不重点。
例如:
txtEmpID.TabStop = false;