如何基于ValidateInputs的校验条件阻止SetValues等后续代码执行?
解决思路:通过校验返回值控制流程
这是个很典型的表单校验场景,咱们只需要调整ValidateInputs的返回值类型,再在点击事件里做个判断就能实现需求。具体操作如下:
1. 修改ValidateInputs方法,让它返回校验结果
把原来的void返回类型改成bool,校验不通过时返回false,全部校验通过后返回true:
private bool ValidateInputs() { if (txtBox_eventName.Text.Trim() == string.Empty) { MessageBox.Show("Please enter a valid event name", "Action Required", MessageBoxButtons.OK, MessageBoxIcon.Error); txtBox_eventName.Focus(); return false; // 校验失败,返回false } if (nud_noOfGuests.Value < 10 || nud_noOfGuests.Value > 200) { MessageBox.Show("Please enter no of guests between 10 and 200", "Action Required", MessageBoxButtons.OK, MessageBoxIcon.Error); return false; } if (radBtn_primeRib.Checked == false && radBtn_chickenMarsala.Checked == false && radBtn_gardenLasagna.Checked == false) { MessageBox.Show("Please make an Entree choice", "Action Required", MessageBoxButtons.OK, MessageBoxIcon.Error); // 这里修正了拼写错误:Reuired → Required return false; } // 所有校验都通过,返回true return true; }
2. 在点击事件中根据校验结果决定是否执行后续逻辑
在btn_createEvent_Click方法里,先调用校验方法,如果返回false就直接退出方法,跳过后续代码;只有校验通过时才执行SetValues及之后的业务逻辑:
private void btn_createEvent_Click(object sender, EventArgs e) { // 先执行校验,不通过则直接终止方法 if (!ValidateInputs()) { return; } // 只有校验全部通过,才会执行以下代码 SetValues(); calcCharges = new CateringEvent(eventName, noOfGuests, selectedEntre, barOption, wineOption); lbl_calcEntreCharges.Text = calcCharges.EntreCharge.ToString("C2"); lbl_calcDrinkCharges.Text = calcCharges.DrinksCharge.ToString("C2"); lbl_calcSurcharge.Text = calcCharges.Surcharge.ToString("C2"); lbl_calcTotalCharges.Text = calcCharges.TotalCharge.ToString("C2"); txtBox_eventName.Enabled = false; btn_createEvent.Enabled = false; btn_modifyEvent.Enabled = true; }
这样修改后,只要ValidateInputs里任意一个校验条件触发,方法就会返回false,点击事件会直接跳出,后续的业务代码完全不会执行;只有所有校验都通过时,才会继续完成创建事件的逻辑。
内容的提问来源于stack exchange,提问作者Uz_IT
相关产品推荐
相关产品推荐

