繁体   English   中英

将光标移动到 C# 中的文本框

[英]Bring cursor to a textbox in C#

我想在单击按钮时将光标移至文本框。 我怎样才能做到这一点? 我尝试了 Focus() 方法,但它没有用。 代码如下所示。

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

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

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

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

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

另外 - 你为什么要设置TabIndex=1 通常TabIndex在设计时设置并单独保留(当然除非这些是动态创建的)。 除非你有这样做的特殊原因,否则我会摆脱那条线。 它与为什么这行得通/行不通无关——只是一个观察。

再次编辑:

如果您尝试在TreeViewClick事件中选择一个TextBox ,它通常会失败,因为在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

你必须使用TextBox.Select 方法

例如

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

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

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

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 ,光标可能隐藏在字段底部。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM