首页 > 解决方案 > c# 检查字符串(电子邮件地址)的最佳事件,如果它不满足 dataGridView 中的某些条件,则不会在该单元格中丢失焦点

问题描述

检查特定字符串(如电子邮件地址)的最佳或适当事件是什么。具有此最低要求的字符串。例子emailAddress=stack@overflow.us。我试过了cellValidatedcellEndEdit但在检查字符串后它失去了焦点。我需要的是那个; emailAddress.Contains("@") emailAddress.Contains(".") emailAddress.Length>=5..ETC。

如果某些要求不满足,它不应失去对单元的关注。

标签: c#datagridview

解决方案


您想为此连接DataGridView_CellValidating事件。它可以这样工作……用户在电子邮件列中输入一些文本……当用户试图“离开”单元格时,该CellValidating事件将触发。在这里,我们检查正在验证的单元格是否在“电子邮件”列中。如果它是并且是一个有效的电子邮件地址,那么,什么都不会发生,我们继续。但是,如果文本不是有效的电子邮件地址,则会显示一个消息框,指示无效的电子邮件地址。然后在用户关闭消息框后……他们将被“强制”在单元格中输入“有效”电子邮件地址,或者在这种情况下,输入一个空单元格以继续。

可以通过多种方式验证电子邮件,Zohar 提供的链接是验证地址的一种方法,并且需要使用System.Net.Mail库。MS还有另一种使用正则表达式并且效果很好的方法……如何验证字符串是否为有效的电子邮件格式

private void dataGridView1_CellValidating(object sender, DataGridViewCellValidatingEventArgs e) {
  if (e.RowIndex >= 0 && dataGridView1.Columns[e.ColumnIndex].Name == "Email") {
    if (!String.IsNullOrEmpty(e.FormattedValue.ToString())) {
      if (!EmailIsValid(e.FormattedValue.ToString())) {
        MessageBox.Show("Invalid email address: " + e.FormattedValue.ToString());
        e.Cancel = true;
      }
    }
  }
}

public bool EmailIsValid(string emailaddress) {
  try {
    MailAddress m = new MailAddress(emailaddress);
    return true;
  }
  catch (FormatException) {
    return false;
  }
}

推荐阅读