5

当我单击一个按钮时,我想将光标带到一个文本框。我怎样才能做到这一点?我尝试了 Focus() 方法,但它不起作用。代码如下所示。

CsNIPAddrTextBox.Focus();
CsNIPAddrTextBox.TabIndex = 1;
4

8 回答 8

18

试试textbox1.select()。这是将光标带到文本框的最佳方法。它还选择文本框的内容,这使用户更容易编辑文本框内的内容。

于 2015-02-17T03:53:51.630 回答
8

如果那是一个“正确的”文本框(即不是自定义的),那么只需调用就Focus()可以了。但是,如果它是只读的,它可能不会(我不确定 - 我没有尝试过。我知道您可以在只读框中获得插入符号,这意味着它可以获得焦点)。当然,如果不是,Enabled那么您将无法设置焦点。

检查CanFocus属性是否为真 - 如果不是,则可能有其他原因阻止控件接收焦点。

但是,如果那是true,并且插入符号仍然无法到达控件 - 您需要验证它是否正在接收它。为文本框的GotFocus事件添加一个事件处理程序并为其设置断点以阐明它是否被命中。我的猜测是你的断点会被击中。如果是这样 - 那么答案是在您单击按钮后,另一个进程立即将焦点设置到另一个控件。 例如,如果您在验证事件处理程序中执行此类操作,您将获得类似的结果,因为在触发处理程序时 Windows 窗体管道已经在更改控件的过程中。

另外 - 你为什么要设置TabIndex=1?通常TabIndex在设计时设置并单独放置(当然,除非这些是动态创建的)。除非您有特定的理由这样做,否则我会摆脱那条线。它与为什么这会/不会起作用无关 - 只是一个观察。

于 2012-06-21T09:56:02.393 回答
5

再次编辑:

如果您尝试在 aTextBoxClick事件中选择 a TreeView,它通常会失败,因为在Click事件之后TreeNode将被选择,使您以前的Focus()Select()无用的。可行的方法也许是在Timer.

Timer t = new Timer();
t.Interval = 10;
t.Tick += new EventHandler((s,ev)=>textBox2.Focus());
t.Start();

虽然这更像是一个黑客......

于 2012-06-21T09:53:35.127 回答
5

设置窗体的 ActiveControl 属性

ActiveControl = yourtextbox
于 2014-08-16T14:59:55.587 回答
2

您必须使用TextBox.Select 方法

例如

textbox1.Select(textbox1.Text.Length,0);

将光标设置到您的文本框中文本的末尾。

于 2012-06-21T10:27:44.107 回答
2

如果我没看错,您是在谈论将鼠标光标移动到文本框吗?- 然后你可以使用这样的代码:

System.Windows.Forms.Cursor.Position = 
     PointToScreen( 
            new Point( textBox1.Location.X + 5, textBox1.Location.Y + 5) 
     );
于 2012-06-21T13:45:31.253 回答
2

我知道你们中的许多人已经提供了答案,但这可能对一些无法从之前的回复中得到答案的人有用。这对我有用Select(),输入文本的设置已将光标设置为文本框。

在表单构造函数中有这个:

this.Activated += OnActivated;

处理程序代码:

private void OnActivated(object sender, EventArgs eventArgs)
        {
            txtUser.Select();
        }
于 2016-03-22T16:37:51.100 回答
1

如果textbox.Multiline=true和/或textbox.WordWrap = true,光标可能隐藏在字段的底部。

于 2020-08-14T21:49:58.117 回答