当我单击一个按钮时,我想将光标带到一个文本框。我怎样才能做到这一点?我尝试了 Focus() 方法,但它不起作用。代码如下所示。
CsNIPAddrTextBox.Focus();
CsNIPAddrTextBox.TabIndex = 1;
当我单击一个按钮时,我想将光标带到一个文本框。我怎样才能做到这一点?我尝试了 Focus() 方法,但它不起作用。代码如下所示。
CsNIPAddrTextBox.Focus();
CsNIPAddrTextBox.TabIndex = 1;
试试textbox1.select()
。这是将光标带到文本框的最佳方法。它还选择文本框的内容,这使用户更容易编辑文本框内的内容。
如果那是一个“正确的”文本框(即不是自定义的),那么只需调用就Focus()
可以了。但是,如果它是只读的,它可能不会(我不确定 - 我没有尝试过。我知道您可以在只读框中获得插入符号,这意味着它可以获得焦点)。当然,如果不是,Enabled
那么您将无法设置焦点。
检查CanFocus
属性是否为真 - 如果不是,则可能有其他原因阻止控件接收焦点。
但是,如果那是true
,并且插入符号仍然无法到达控件 - 您需要验证它是否正在接收它。为文本框的GotFocus
事件添加一个事件处理程序并为其设置断点以阐明它是否被命中。我的猜测是你的断点会被击中。如果是这样 - 那么答案是在您单击按钮后,另一个进程立即将焦点设置到另一个控件。 例如,如果您在验证事件处理程序中执行此类操作,您将获得类似的结果,因为在触发处理程序时 Windows 窗体管道已经在更改控件的过程中。
另外 - 你为什么要设置TabIndex=1
?通常TabIndex
在设计时设置并单独放置(当然,除非这些是动态创建的)。除非您有特定的理由这样做,否则我会摆脱那条线。它与为什么这会/不会起作用无关 - 只是一个观察。
再次编辑:
如果您尝试在 aTextBox
的Click
事件中选择 a TreeView
,它通常会失败,因为在Click
事件之后TreeNode
将被选择,使您以前的Focus()
或Select()
无用的。可行的方法也许是在Timer
.
Timer t = new Timer();
t.Interval = 10;
t.Tick += new EventHandler((s,ev)=>textBox2.Focus());
t.Start();
虽然这更像是一个黑客......
设置窗体的 ActiveControl 属性
ActiveControl = yourtextbox
如果我没看错,您是在谈论将鼠标光标移动到文本框吗?- 然后你可以使用这样的代码:
System.Windows.Forms.Cursor.Position =
PointToScreen(
new Point( textBox1.Location.X + 5, textBox1.Location.Y + 5)
);
我知道你们中的许多人已经提供了答案,但这可能对一些无法从之前的回复中得到答案的人有用。这对我有用Select()
,输入文本的设置已将光标设置为文本框。
在表单构造函数中有这个:
this.Activated += OnActivated;
处理程序代码:
private void OnActivated(object sender, EventArgs eventArgs)
{
txtUser.Select();
}
如果textbox.Multiline=true
和/或textbox.WordWrap = true
,光标可能隐藏在字段的底部。