You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在窗体中引用类属性实现输入验证?

如何用Worker类属性替代主窗口的验证逻辑?

我已经在Worker类中实现了带验证的读写属性,现在想把主窗口里的验证逻辑替换成调用这些类属性的方式,同时保留原else语句里的业务代码,请问主窗口的判断语句该怎么改?

Worker类原有属性代码

//Validates if anything has been entered for name
internal string workName
{
    get
    {
        return Name;
    }
    set
    {
        // 注意:原代码变量名错误,需将workerName改为value,否则验证逻辑无效
        if (string.IsNullOrEmpty(value))
            MessageBox.Show("You must enter something for name.", "ERROR", MessageBoxButton.OK, MessageBoxImage.Error);
        else
            Name = value;
    }
}

//Validates range and returns the work messages for calculation
internal int workMessages
{
    get
    {
        return Messages;
    }
    set
    {
        // 注意:原代码变量名错误,需将messagesSent改为value,否则验证逻辑无效
        if (value <= 0)
            throw new ArgumentOutOfRangeException("You must enter a number greater than 0.");
        else 
            Messages = value;
    }
}

主窗口原有验证代码

private void btnCalculate_Click(object sender, RoutedEventArgs e)
{ 
    string strName = txtName.Text.Trim();
    int intMessages;

    if (string.IsNullOrEmpty(strName))
    {
        MessageBox.Show("You must enter something for name.", "ERROR", MessageBoxButton.OK, MessageBoxImage.Error);
        return;
    }

    if (!int.TryParse(txtMessages.Text.Trim(), out intMessages)|| intMessages < 0){
        MessageBox.Show("You must enter a number greater than 0 for messages sent.","ERROR", MessageBoxButton.OK, MessageBoxImage.Error);
        return;
    }
    else
    {
        //Increment each time a worker is submitted
        Worker.totalWorkers++;
        //Add and store each time messages sent is valid
        int totalMessages = int.Parse(txtMessages.Text.Trim());
        Worker.totalMessages += totalMessages;
    }
}

修改后的主窗口代码

private void btnCalculate_Click(object sender, RoutedEventArgs e)
{ 
    string strName = txtName.Text.Trim();
    int intMessages;

    // 创建Worker实例用于调用类属性
    Worker worker = new Worker();

    // 调用workName属性完成姓名验证,属性内部会自动弹出错误提示
    worker.workName = strName;
    // 若姓名未通过验证,直接终止后续逻辑
    if (string.IsNullOrEmpty(worker.workName))
        return;

    // 先做输入格式验证(确保是有效数字)
    if (!int.TryParse(txtMessages.Text.Trim(), out intMessages))
    {
        MessageBox.Show("You must enter a valid number for messages sent.", "ERROR", MessageBoxButton.OK, MessageBoxImage.Error);
        return;
    }

    // 调用workMessages属性完成范围验证,捕获属性抛出的异常并弹出提示
    try
    {
        worker.workMessages = intMessages;
    }
    catch (ArgumentOutOfRangeException ex)
    {
        MessageBox.Show(ex.Message, "ERROR", MessageBoxButton.OK, MessageBoxImage.Error);
        return;
    }

    // 所有验证通过后,执行原else块中的业务代码
    Worker.totalWorkers++;
    Worker.totalMessages += intMessages;
}

关键说明

  1. 先修正Worker类属性中的变量名错误:将workerName和messagesSent改为value,否则验证逻辑完全失效。
  2. 姓名验证直接通过给workName赋值触发,属性内部会处理空值提示,后续通过判断属性返回值是否为空决定是否继续执行。
  3. 消息数的格式验证仍需在主窗口完成(确保输入是有效数字),范围验证交给workMessages属性,通过捕获异常处理错误提示。
  4. 原else块中的业务代码完整保留,仅在所有验证通过后执行。

内容的提问来源于stack exchange,提问作者OGanunobyfan1629

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 23:50:35