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

问题描述 投票:0回答:21

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

textBox1.Focused = false;

ReadOnly
属性值为
true

然后我尝试将焦点设置在表单上,以便将其从所有文本框中删除,但这也不起作用:

this.Focus();

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

false

那么,如何从文本框中删除焦点?

c# .net winforms textbox focus
21个回答
85
投票

您可以添加以下代码:

this.ActiveControl = null;  //this = form

78
投票

专注于标签对我来说不起作用,做类似

label1.Focus()
的事情对吧? 加载表单时文本框仍然具有焦点,但是尝试 Velociraptors 答案,为我工作,将表单的活动控件设置为标签,如下所示:

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

36
投票

尝试禁用和启用文本框。


35
投票

您还可以将表单

activecontrol
属性设置为
null
就像

ActiveControl = null;

10
投票

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


8
投票

试试这个:

首先设置 Tab 键顺序。

然后在表单加载事件中,我们可以以编程方式将 Tab 键按下发送到应用程序。这样该应用程序会将焦点集中到 Tab 键顺序中的第一个控件上。

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

SendKeys.Send("{TAB}");

这对我有用。


4
投票

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

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

4
投票

这篇文章引导我这样做:

ActiveControl = null;

这使我能够捕获顶层的所有键盘输入,而无需其他控件发疯。


3
投票

我找到了一个不错的选择!它最适合我,无需将注意力集中在其他事情上。

尝试一下:

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

3
投票

我在我的自定义控件上做了这个,我在Focus()上做了这个

this.Parent.Focus();

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


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

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


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

1
投票

2022 年的聚会有点晚了,但是这里的解决方案都不适合我使用 .Net_6.0_windows(我不知道为什么),所以我想出了这个解决方案:

Label focusoutLabel = new Label() { 
    Text = "",
    Name = "somegenericplaceholdernamethatwillneverbeusedinmyprogram",
    Visible = false,
};
this.Controls.Add(focusoutLabel);
this.ActiveControl = focusoutLabel;

^将此代码放入您的表单加载处理程序^


0
投票

我解决这个问题的方法是放置我所有的 winform 控件。我将所有标签和非选择 winform 控件设置为 Tab 键顺序 0,然后将我的第一个控件设置为 Tab 键顺序 2,然后将每个可选控件的顺序增加 1,因此 3、4、5 等...

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


0
投票

您可以通过两种方法来做到这一点

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

    1. 使您不想焦点的文本框1可见
    2. 使第二个不可见,然后转到该文本字段的属性并选择

textbox2 的 tabindex 值为 0

  1. 然后选择文本框的 tabindex1 到 1 现在它不会关注 textbox1

0
投票

如果您想要的只是文本框的所有内容都没有蓝色选择的视觉效果,只需选择无文本即可:

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

此后,使用

.Text += "..."
添加内容时,将不会显示蓝色选择。


0
投票

请尝试将

TabStop
设置为
False
对于您未获得焦点的视图控件。

例如:

txtEmpID.TabStop = false;

0
投票

你可以尝试:

textBox1.Enable = false;

0
投票

使用 System.Windows.Input

Keyboard.ClearFocus();

0
投票

我尝试了这里的所有解决方案,但没有一个有效。然而,Select() 对我有用。

this.Select();//"this" still being the form.

-1
投票

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

SetStyle(ControlStyles.Selectable, false);

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

示例:

public partial class Main : UserControl
{

    public Main()
    {
        InitializeComponent();
        SetStyle(ControlStyles.Selectable, false);
    }
© www.soinside.com 2019 - 2024. All rights reserved.