C# 如何在WinForms中从文本框中删除焦点?
我需要从几个文本框中删除焦点。我尝试使用:C# 如何在WinForms中从文本框中删除焦点?,c#,.net,winforms,textbox,focus,C#,.net,Winforms,Textbox,Focus,我需要从几个文本框中删除焦点。我尝试使用: textBox1.Focused = false; 其ReadOnly属性值为true 然后,我尝试将焦点设置在表单上,以便将其从所有文本框中删除,但这也失败了: this.Focus(); 当选择文本框时,函数返回false 那么,如何从文本框中移除焦点呢?尝试禁用并启用文本框。您需要一些其他可聚焦控件来将焦点移动到文本框 请注意,可以将焦点设置为标签。您可能想考虑下一个[Tab]键在哪里取它。 还请注意,不能将其设置为表单。像Form和Pane
textBox1.Focused = false;
其ReadOnly
属性值为true
然后,我尝试将焦点设置在表单上,以便将其从所有文本框中删除,但这也失败了:
this.Focus();
当选择文本框时,函数返回false
那么,如何从文本框中移除焦点呢?尝试禁用并启用文本框。您需要一些其他可聚焦控件来将焦点移动到文本框 请注意,可以将焦点设置为标签。您可能想考虑下一个[Tab]键在哪里取它。
还请注意,不能将其设置为表单。像Form和Panel这样的容器控件将焦点传递给它们的第一个子控件。这可能是你想让它离开的文本框
Focus
设置输入焦点,因此将其设置为表单将不起作用,因为表单不接受输入。尝试将窗体的ActiveControl
属性设置为其他控件。您也可以使用Select
来选择特定控件,或者SelectNextControl
来选择选项卡顺序中的下一个控件。我找到了一个很好的替代方法!它最适合我,不会把注意力放在其他事情上
试试看:
private void richTextBox_KeyDown(object sender, KeyEventArgs e)
{
e.SuppressKeyPress = true;
}
专注于标签对我来说不起作用,比如做
label1.Focus()
对吗?
加载表单时,文本框仍然具有焦点,但仍在尝试
回答,为我工作,将窗体的活动控件设置为标签,如下所示:
private void Form1\u加载(对象发送方,事件参数e)
{
this.ActiveControl=label1;
}
似乎我不必将焦点设置为任何其他元素。在WindowsPhone7应用程序中,我一直在使用Focus方法来取消文本框的焦点设置
发出以下命令将焦点设置为“无”:
void SearchBox_KeyDown(object sender, System.Windows.Input.KeyEventArgs e)
{
if (e.Key == Key.Enter)
{
Focus();
}
}
它对我有效,但我不知道为什么对你无效://试试这个:
首先设置选项卡顺序
然后在FormLoad事件中,我们可以通过编程方式向应用程序发送一个tab键。这样应用程序将把焦点放在选项卡顺序中的第一个控件上
在form load中,甚至写下这一行
SendKeys.Send("{TAB}");
这对我来说确实有效。一个简单的解决方案是取消焦点,只需创建自己的类:
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);
}
}
您还可以将表单
activecontrol
属性设置为null
类似
ActiveControl = null;
我在我的自定义控件上做了这个,我在Focus()上做了这个 因此,如果texbox聚焦-它会立即聚焦textbox父对象(窗体或面板…)
如果您想在自定义控件上执行此操作,这是一个很好的选择。这篇文章引导我这样做:
ActiveControl = null;
这使我能够在顶层捕获所有键盘输入,而不会让其他控件发疯。//使用系统;
//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();
});
}
}
}
//使用System.Collections.Generic;
//使用System.Linq;
私有void Form1\u加载(对象发送方、事件参数e)
{
聚焦于其他控件(Controls.Cast(),button1);
}
private void FocusOnOtherControl(IEnumerable controls,Control focusOnMe),其中T:Control
{
foreach(控件中的var控件)
{
if(control.GetType().Equals(typeof(TextBox)))
{
control.TabStop=false;
control.LostFocus+=新的EventHandler((对象发送方,EventArgs e)=>
{
focusOnMe.Focus();
});
}
}
}
我绕过它的方法是放置所有winform控件。我将所有标签和未选择的winform控件设置为tab order 0,然后将第一个控件设置为tab order 2,然后将每个可选择控件的顺序增加1,因此3、4、5等
这样,当我的Winforms启动时,第一个文本框没有焦点 您可以添加以下代码:
this.ActiveControl = null; //this = form
你可以用两种方法来做这件事
- 现在只需将所需文本框的“TabStop”属性设置为false,即使只有一个文本字段,它也不会聚焦
- 拖动两个文本框
- 使一个不需要foucus的文本框1可见
- 使第二个不可见,转到该文本字段的属性并选择
如果您想要的只是文本框内容上没有蓝色选择的光学效果,只需选择“无文本”:
textBox_Log.SelectionStart = 0;
textBox_Log.SelectionLength = 0;
textBox_Log.Select();
在此之后,当使用
.Text+=“…”
添加内容时,将不会显示任何蓝色选择。请尝试将未聚焦的视图控件的选项卡设置为False
例如:
txtEmpID.TabStop = false;
在窗体的构造函数中或在持有TextBox的UserControl中写入
SetStyle(ControlStyles.Selectable, false);
在初始化组件()之后;
资料来源:
例如:
public partial class Main : UserControl
{
public Main()
{
InitializeComponent();
SetStyle(ControlStyles.Selectable, false);
}
您可以尝试:
textBox1.Enable = false;
使用System.Windows.Input
Keyboard.ClearFocus();
谢谢我只是试着把注意力集中在标签上,现在文本框变得不集中。由于某些原因,您似乎无法将焦点放在窗体上。容器控件(窗体、面板)将把焦点传递给它们的第一个子控件。这是一个很好的建议。这解决了我的问题。我对表单本身使用按键,并且有几个按钮等。问题是应用程序从读卡器获取输入,所以如果焦点离开表单本身,那么所有的麻烦都会消失。点击一个按钮后集中注意力在标签上解决了我的问题。非常感谢!这项工作非常顺利,因为它同时会自动选择选项卡列表中的下一个控件。我正在Silverlight中使用MVVM进行开发,并使用针对文本框的行为实现了这项功能。因为我手头没有另一个UIElement来设置禁用/启用解决方案的焦点,所以效果非常好。谢谢如何禁用它?@miguelmpntextBox1.Enabled=false代码>将禁用您的文本框。将其设置为true
将重新启用
Keyboard.ClearFocus();