为什么以下 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;
        }

为什么以下 C# 赢表单验证方法不起作用

取决于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();