在OnValidating中使用Messagebox时,光标消失

时间:2019-02-04 19:44:43

标签: c# winforms

我有一个自定义文本框,正在通过覆盖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;
    }
}

}

2 个答案:

答案 0 :(得分:0)

通过这样设置“选择”位置(就在e.Cancel = true;之后),我可以得到我想要的行为:

SelectionStart = this.TextLength;
SelectionLength = 0;

您可能还想反转这些值(以在验证失败后选择整个字段)

答案 1 :(得分:0)

我的代码缺少对基址的调用。OnValidate这似乎是问题的原因。