如何从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属性设置为不同的控件。 您也可以使用“ Selectselect特定的控件或“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. 让一个可见的你不想要的文本框1
    2. 使第二个不可见并转到该文本字段的属性并select

tabindex值为0的textbox2

  1. 并select您的textbox1的tabindex到1,现在它不会集中在textbox1上

如果你想要的只是文本框内没有蓝色select的光学效果,只需select没有文本:

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

在此之后,当用.Text += "..."添加内容时,不会显示蓝色select。

请尝试设置TabStopFalse您的视图控制,这是不重点。

例如:

 txtEmpID.TabStop = false;