为什么以下 C# 赢表单验证方法不起作用
本文关键字:验证 方法 不起作用 表单 为什么 | 更新日期: 2023-09-27 17:57:21
我有一个验证方法,其中包含 5 个验证元素,其中 4 个按预期工作,但 1 个没有,问题是为什么不呢?
我遇到的问题是验证"竞赛课程"。 我希望只有当组合框 cbCourseRound1 不为空时,IsValid 才为真。 目前,无论此组合框是空白还是填充,这都在验证中。 所有其他验证都有效,
private bool Validate(Competition compSetup)
{
string CompetitionName = compSetup._CompetitionName;
int CompetitionFormat = compSetup._CompetitionFormatId;
string CompetitionGender = cbGenderOfCompetiton.Text;
string CompetitionMarker = cbMarker.Text;
string CompetitionCourse = cbCourseRound1.Text;
if (!CompetitionName.Equals(string.Empty) && !CompetitionGender.Equals("Mixed") && CompetitionFormat.Equals(1) && !CompetitionCourse.Equals(string.Empty) &&
((CompetitionGender.Equals("Female") && CompetitionMarker.Equals("Red")) || (!CompetitionGender.Equals("Female") && !CompetitionMarker.Equals("Red"))))
{
IsValid = true;
}
else
{
IsValid = false;
}
return IsValid;
}
取决于CompetitionCourse
中的内容。您必须通过调试代码来自己检查这一点。
如果 ComboBox 文本字段为空,您最好明确确保CompetitionCourse
包含null
(因为我怀疑它包含"):
CompetitionCourse = (string.IsNullOrEmpty(cbCourseRound1.Text)) ? null : cbCourseRound1.Text;
目前,无论这个组合框是否存在,这都在验证中 空白或填充。
检查组合框的 Items 属性,而不是类似Text
属性。
cbCourseRound1.Items != null && cbCourseRound1.Items.Count > 0
首先,对字符串使用 .Equals
是非常 Java 的。C#有运算符重载,看起来更好:
if(CompetitionName!="" && CompetitionGender!="Mixed" ...)
至于测试本身,你需要设置一个断点,看看"竞争课程"有什么。我的猜测是它不是一个空字符串,而是有一些空格。尝试使用
...!CompetitionCourse.Trim()!=""
你的代码很难阅读,我会尝试简化它:
private bool Validate(Competition compSetup)
{
bool isValid = cbGenderOfCompetiton.Text != "Female" && cbMarker.Text == "Red";
if (!isValid)
{
isValid = !string.IsNullOrEmpty(compSetup._CompetitionName);
if (isValid)
isValid = compSetup._CompetitionFormatId.Text == "Female";// this is redundant: cbGenderOfCompetiton.Text != "Mixed";
if (isValid)
isValid = CompetitionFormat == 1;
if (isValid)
isValid = cbCourseRound1.SelectedIndex != -1;
if (isValid)
isValid = cbMarker.Text == "Red";
}
return isValid;
}
请注意,我使用了SelectedIndex
而不是Combobox.Text
,因为它不太容易出错。
而不是使用!等于,使用 IsNullOrWhitespace 或 IsNullOrEmpty。它效果更好。
也许您应该尝试修剪文本框周围的空白区域。例如,txtName.Trim();