表单加载时如何将焦点放在 TextBox 上?
Posted
技术标签:
【中文标题】表单加载时如何将焦点放在 TextBox 上?【英文标题】:how to put focus on TextBox when the form load? 【发布时间】:2011-09-29 15:28:27 【问题描述】:我的 C# 程序中有文本框
我需要在程序启动时将焦点放在文本框上
我在 Form_Load 上试试这个:
MyTextBox.Focus();
但它不会工作
【问题讨论】:
【参考方案1】:最后我发现了我使用 Metro 框架的问题,您的所有解决方案都不适用于 MetroTextBox,而您的所有解决方案都适用于普通文本框 在 load , show , visibility_change ,events 中,即使 tab index = 0 也是有效的。
// private void Form1_VisibleChanged(object sender, EventArgs e)
// private void Form1__Shown(object sender, EventArgs e)
private void Form1_Load(object sender, EventArgs e)
textBox1.Select();
this.ActiveControl=textBox1;
textBox1.Focus();
【讨论】:
【参考方案2】:在您的表单上,转到属性并确保“TopMost”属性设置为 true, 这将解决您的问题。
【讨论】:
【参考方案3】:设置 Tab Index 属性的值 = 0,然后在表单加载函数中写入:
YourTextboxName.Focus();
它会起作用的。
【讨论】:
【参考方案4】:将 Tabstop 设置为 True 并将 TabIndex 设置为您需要关注的控件的最小值。
例如如果您有 2 个文本框:TextBox1 和 TextBox2,请将两者的 Tabstop 设置为 True,并将 TabIndex 分别设置为 0 和 1。当表单加载时,焦点将位于 TextBox1 上,按下“Tab”键时,焦点将移至 TextBox2。
【讨论】:
【参考方案5】:您可以在文本框设置中使用textBox1.select();
或TabIndex。 TabIndex=0
优先关注。
【讨论】:
如果我们调用 textBox1.select();在表单加载事件处理程序中,它将焦点设置在 textBox1 中。【参考方案6】:如果控件尚未呈现,则无法将焦点设置到控件。 Form.Load() 在呈现控件之前发生。
转到表单的事件并双击“显示”事件。在表单显示的事件处理程序中调用 control.Focus() 方法。
private void myForm_Shown(object sender, EventArgs e)
// Call textbox's focus method
txtMyTextbox.Focus();
【讨论】:
【参考方案7】:在jquery中设置焦点
$(function()
$("#txtBox1").focus();
);
或者在javascript中你可以这样做
window.onload = function()
document.getElementById("txtBox1").focus();
;
【讨论】:
这可能是网站问题的一个很好的答案,但这个问题被标记为c#
和winforms
。【参考方案8】:
它对我有用 将标签索引设置为 0 this.yourtextbox.TabIndex = 0;
【讨论】:
【参考方案9】:我通过更改 TextBox 的“TabIndex”属性解决了我的问题。我为 TextBox 设置了 0,我想在程序启动时将其集中在 Form 上。
【讨论】:
【参考方案10】:你不能让它工作的原因是Load
事件在窗体被绘制或呈现之前被调用。
这就像告诉比萨店如何制作比萨,然后要求他们在制作之前向您发送一张照片,说明比萨上的意大利辣香肠含量。
using System;
using System.Windows.Forms;
namespace Testing
public partial class TestForm : Form
public TestForm()
InitializeComponent();
Load += TestForm_Load;
VisibleChanged += TestForm_VisibleChanged;
Shown += TestForm_Shown;
Show();
private void TestForm_Load(object sender, EventArgs e)
MessageBox.Show("This event is called before the form is rendered.");
private void TestForm_VisibleChanged(object sender, EventArgs e)
MessageBox.Show("This event is called before the form is rendered.");
private void TestForm_Shown(object sender, EventArgs e)
MessageBox.Show("This event is called after the form is rendered.");
txtFirstName.Focus();
【讨论】:
【参考方案11】:你可以试试:
MyTextBox.Select();
根据文档:
如果控件的 Selectable,Select 方法将激活该控件 样式位在 ControlStyles 中设置为 true,它包含在另一个 控件,并且它的所有父控件都是可见和启用的。
您可以首先通过检查MyTextBox.CanSelect 属性来检查控件是否可以选择。
【讨论】:
【参考方案12】:使用表单显示的事件并设置
MyTextBox.Focus();
【讨论】:
【参考方案13】:设置表单的ActiveControl
属性应该没问题。
this.ActiveControl = yourtextboxname;
【讨论】:
我为ComboBox
尝试了这个。但它也不起作用!
感谢这对我有用,而其他一切都没有。不知道为什么 Tab Index = 0 不起作用,但在加载表单/显示对话框时可能会出现奇怪的操作顺序。
试试这个 >>> this.ActiveControl = yourtextboxname.Control;
这很好用,但为什么 MyTextBox.Focus();
不工作 - 一旦程序运行,它似乎工作正常。
写this.ActiveControl = textBox1;
大家都明白“textBox1”的意思了。 “youtextboxname”听起来像... = "MyTextBox";
【参考方案14】:
Textbox.Focus()
“尝试”将焦点设置在文本框元素上。例如,如果元素可见性被隐藏,Focus()
将不起作用。所以在调用Focus()
之前确保你的元素是可见的。
【讨论】:
【参考方案15】:如果您只想在第一次显示表单时设置焦点,请尝试处理Form.Shown 事件并在那里进行。否则使用Control.VisibleChanged。
【讨论】:
【参考方案16】:检查您的标签顺序并确保文本框设置为零
【讨论】:
工作。或者只是 tabindex 成为表单中第一个光标“可聚焦”元素。以上是关于表单加载时如何将焦点放在 TextBox 上?的主要内容,如果未能解决你的问题,请参考以下文章
单击ListViewItem时如何将焦点设置在TextBox上?