我有一个自定义文本框,正在通过覆盖OnValidating
方法进行验证。作为验证的一部分,我正在使用消息框向用户提供反馈。
显示消息框后,我设置了e.Cancel = true
。这可以,但是文本框不再具有光标。它具有焦点,并且如果您键入控件,它仍然可以工作,但是永远不会显示光标。即使您在文本框中单击,光标也将不再显示。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApp1
{
public class txtExample:TextBox
{
protected override void OnValidating(CancelEventArgs e)
{
if (SomeValidationCode() == false)
{
MessageBox.Show("Validatioon Failed");
e.Cancel = true;
return;
}
base.OnValidating(e);
}
private bool SomeValidationCode()
{
return false;
}
}
}
答案 0 :(得分:0)
通过这样设置“选择”位置(就在e.Cancel = true;
之后),我可以得到我想要的行为:
SelectionStart = this.TextLength;
SelectionLength = 0;
您可能还想反转这些值(以在验证失败后选择整个字段)
答案 1 :(得分:0)
我的代码缺少对基址的调用。OnValidate这似乎是问题的原因。