环境:Win7 Pro上的VS 2012。
我有一个从TextBox派生的控件。控件的文本初始化为“00”。我想确保只要控件变为活动状态,光标就位于文本字符串的末尾(如果存在)。
我在用户控件中包含了其中三个控件。如果满足以下所有条件,我只能按照我想要的方式使光标定位工作:
以下是我的覆盖:
protected override void OnEnter(EventArgs e)
{
base.OnEnter(e);
if (Text.Length > 0)
{
SelectionStart = Text.Length;
}
}
protected override void OnGotFocus(EventArgs e)
{
base.OnGotFocus(e);
if (Text.Length > 0)
{
SelectionStart = Text.Length;
}
}
非常感谢。
答案 0 :(得分:0)
当您使用Tab键切换到文本框时,您编写的代码确实有效(我刚测试它以确认)。
使用鼠标单击文本框时,它不起作用。原因可能是因为dot net将插入符号设置为鼠标光标位置,并且在GotFocus
事件被触发后执行此操作(并且GotFocus
事件在Enter
之后被触发根据以下链接触发{1}}事件:https://msdn.microsoft.com/en-us/library/system.windows.forms.control.gotfocus(v=vs.110).aspx)。
我没有一个优雅的解决方案,但是直到有人提出更好的东西,你可以添加一个小延迟(当你打破调试器时会发生这种情况),这似乎对我来说很好:< / p>
protected override async void OnGotFocus(EventArgs e)
{
base.OnGotFocus(e);
await Task.Delay(10);
if (Text.Length > 0)
{
SelectionStart = Text.Length;
}
}