我需要移除多个文本框的焦点。我尝试过使用:
textBox1.Focused = false;
它的ReadOnly
属性值为true
。
接着我尝试将焦点设置在表单上,以便从所有的文本框中移除它,但这也无法生效:
this.Focus();
当选中文本框时,该函数返回false
。
那么,我该如何将焦点从文本框中移除?
您可以添加以下代码:
this.ActiveControl = null; //this = form
专注于标签对我没有用,做类似 label1.Focus()
的事情是吧?
当加载表单时,文本框仍然拥有焦点,然而尝试Velociraptors
的回答,对我有效,像这样设置表单的活动控件到标签:
private void Form1_Load(object sender, EventArgs e)
{
this.ActiveControl = label1;
}
this.ActiveControl = panelOnMyForm;
- Tim Schmelter尝试禁用和启用文本框。
textBox1.Enabled = false;
会禁用你的文本框,将其设置为 true
将重新启用它。 - Raktim Biswas您还可以将表单的 activecontrol
属性设置为 null
,如下所示:
ActiveControl = null;
Focus
可以设置输入焦点,所以将其设置到表单上是行不通的,因为表单不接受输入。尝试将表单的ActiveControl
属性设置为其他控件。您也可以使用Select
选择特定控件或使用SelectNextControl
选择制表顺序中的下一个控件。
Select()
能够解决我的问题。 - Derek WSendKeys.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;
private void richTextBox_KeyDown(object sender, KeyEventArgs e)
{
e.SuppressKeyPress = true;
}
this.Parent.Focus();
如果文本框处于聚焦状态,它会立即将其父级(表单或面板)设为聚焦状态...... 这是一个很好的选项,如果你想在自定义控件中使用它。