如何从WinForms中的TextBox中删除焦点?

时间:2009-07-16 20:56:39

标签: c# .net winforms textbox focus

我需要从几个TextBox中删除焦点。我尝试使用:

textBox1.Focused = false;

ReadOnly属性值为true

然后我尝试将焦点设置在表单上,​​以便从所有TextBox中删除它,但这也无法工作:

this.Focus();

,当选择文本框时,函数返回false

那么,如何从TextBox中删除焦点?

20 个答案:

答案 0 :(得分:105)

你需要一些其他可聚焦的控制来将焦点移动到。

请注意,您可以将焦点设置为标签。您可能想要考虑[Tab]键的下一步。

另请注意,您无法将其设置为表单。像Form和Panel这样的容器控件会将Focus传递给他们的第一个子控件。这可能是你希望它远离的TextBox。

答案 1 :(得分:56)

专注于标签对我来说不起作用,做label1.Focus()这样的事情吧? 加载表单时文本框仍然具有焦点,但尝试Velociraptors 回答,为我工作,将Form的Active控件设置为如下标签:

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

答案 2 :(得分:37)

您可以添加以下代码:

this.ActiveControl = null;  //this = form

答案 3 :(得分:31)

尝试禁用并启用文本框。

答案 4 :(得分:18)

您还可以将表单activecontrol属性设置为null,如

ActiveControl = null;

答案 5 :(得分:8)

Focus设置输入焦点,因此将其设置为表单将不起作用,因为表单不接受输入。尝试将表单的ActiveControl属性设置为其他控件。您也可以使用Select选择特定控件,或使用SelectNextControl在标签顺序中选择下一个控件。

答案 6 :(得分:7)

试试这个:

首先设置标签顺序。

然后在表单加载事件中,我们可以以编程方式向应用程序发送Tab键。因此,该应用程序将按标签顺序将焦点放在第一个控制器上。

在表单加载中甚至写下这一行。

SendKeys.Send("{TAB}");

这对我有用。

答案 7 :(得分:4)

这篇文章引导我这样做:

ActiveControl = null;

这使我可以捕捉顶层的所有键盘输入,而不需要其他控制。

答案 8 :(得分:2)

一个简单的解决方案是终止焦点,只需创建自己的类:

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);
    }
}

答案 9 :(得分:2)

我在自定义控件上创建了这个,我在onFocus()

上完成了这个
this.Parent.Focus();

因此,如果texbox聚焦 - 它会立即聚焦文本框父(表单或面板......) 如果您想在自定义控件上进行此操作,这是一个不错的选择。

答案 10 :(得分:2)

似乎我不必将焦点设置为任何其他元素。在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

它对我有用,但我不知道为什么它不适合你:/

答案 11 :(得分:2)

我找到了一个很好的选择!它最适合我,而不关注其他事情。

试试:

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

答案 12 :(得分:1)

    //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();
                });
            }
        }
    }

答案 13 :(得分:1)

您可以尝试:

textBox1.Enable = false;

答案 14 :(得分:0)

我解决它的方法是放置我所有的winform控件。我将所有标签和非选择的winform控件设置为tab顺序0,然后我的第一个控件作为tab order 2,然后将每个可选控件的顺序递增1,所以3,4,5等...

这样,当我的Winforms启动时,第一个TextBox没有焦点!

答案 15 :(得分:0)

你可以通过两种方法

来做到这一点
  • 只需将所需文本框的“TabStop”属性设置为false,即使您有一个文本字段,它也不会聚焦
  • 拖动两个文本框

    1. 让一个人看到你不想要的文本框
    2. 使第二个不可见,并转到该文本字段的属性并选择
  

tabindex值为textbox2的0

  1. 并选择textbox1的tabindex为1 现在它不会关注textbox1

答案 16 :(得分:0)

如果您想要的只是光学效果,文本框的内容没有蓝色选择,只需选择无文字:

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

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

答案 17 :(得分:0)

请尝试将TabStop设置为False,以便为您的视图控件设置焦点。

例如:

txtEmpID.TabStop = false;

答案 18 :(得分:0)

使用 System.Windows.Input

Keyboard.ClearFocus();

答案 19 :(得分:-1)

在Form或UserControl的构造函数中持有TextBox写入

SetStyle(ControlStyles.Selectable, false);

在InitializeComponent()之后; 资料来源:https://stackoverflow.com/a/4811938/5750078

示例:

public partial class Main : UserControl
{

    public Main()
    {
        InitializeComponent();
        SetStyle(ControlStyles.Selectable, false);
    }