c# - c# 检查字符串(电子邮件地址)的最佳事件,如果它不满足 dataGridView 中的某些条件,则不会在该单元格中丢失焦点
问题描述
检查特定字符串(如电子邮件地址)的最佳或适当事件是什么。具有此最低要求的字符串。例子emailAddress=stack@overflow.us
。我试过了cellValidated
,cellEndEdit
但在检查字符串后它失去了焦点。我需要的是那个;
emailAddress.Contains("@")
emailAddress.Contains(".")
emailAddress.Length>=5
..ETC。
如果某些要求不满足,它不应失去对单元的关注。
解决方案
您想为此连接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;
}
}
推荐阅读
- java - 将子对象分配给父对象
- python - 将两个 pandas 列合并为索引,以列名作为值创建新列
- c# - 方法在移动到下一个之前不会完全执行
- javascript - 掷骰子(随机数)并在桌子上移动
- java - 如何在 Android Studio 中实现高分并在活动之间转移?
- python-3.x - Python pwlf(分段线性函数)对相同的数据给出不同的结果
- python - 如何将 pytorch (CNN+LSTM) 模型转换为 tflite?
- swift - 为什么我无法在 SwiftUI 中连接我的 CoreData?
- pandas - 如何根据包含条件和每行的创建服务字段来更改熊猫中的列值?
- android - 使用不同的卡片样式滚动时,recyclerView 会混淆