Windows 窗体 - 如何中断当前正在执行的代码的执行
Posted
技术标签:
【中文标题】Windows 窗体 - 如何中断当前正在执行的代码的执行【英文标题】:Windows Forms - How to break execution of currently executing code 【发布时间】:2014-10-21 09:26:59 【问题描述】:我有一个名为 AddEditReminderForm 的抽象窗口窗体,其中包含一个事件处理程序和一个方法:
-
buttonSave_Click
执行验证
这里是AddEditReminderForm的相关代码:
protected virtual void buttonSave_Click(object sender, EventArgs e)
title = textboxTitle.Text;
description = textboxDescription.Text;
place = textboxPlace.Text;
date = datePicker.Value.Date;
time = timePicker.Value.TimeOfDay;
PerformValidations();
protected void PerformValidations()
if (String.IsNullOrEmpty(title))
MessageBox.Show("Error: The title field was left empty!");
return;
if (String.IsNullOrEmpty(description))
MessageBox.Show("Error: The description field was left empty!");
return;
if (String.IsNullOrEmpty(place))
MessageBox.Show("Error: The place field was left empty!");
return;
if (date < currentDate)
MessageBox.Show("Error: The date must be in the future!");
return;
if (date == currentDate && time < currentTime)
MessageBox.Show("Error: The time must be in the future!");
return;
然后我有一个名为 AddReminderForm 的表单,它继承自 AddEditReminderForm。我正在覆盖 buttonSave_Click 事件处理程序,以便它除了在基类中执行的正常操作之外还保存提醒。以下是 AddReminderForm 的代码:
using System;
using System.Windows.Forms;
using Reminder.Classes;
namespace Reminder
public partial class AddReminderForm : AddEditReminderForm
public AddReminderForm()
InitializeComponent();
this.Text = "Add Reminder Form";
Label labelFormHeading = this.Controls["labelFormHeading"] as Label;
labelFormHeading.Text = "Add Reminder";
protected override void buttonSave_Click(object sender, EventArgs e)
base.buttonSave_Click(sender, e);
AddReminderOperation();
protected void AddReminderOperation()
ReminderClass reminder = new ReminderClass();
reminder.Id = ReminderHelper.GetCounter();
reminder.Title = title;
reminder.Description = description;
reminder.Place = place;
reminder.Date = date;
reminder.Time = time;
ReminderHelper.AddReminder(reminder);
MessageBox.Show("The reminder has been successfully saved!");
this.Close();
现在,我遇到的问题是,当 AddReminderForm 打开时,如果 PerformValidations 方法中的验证之一失败,则会显示消息框但执行并没有停止,提醒仍然保存。如果其中一项验证失败,我该如何中断执行?我正在使用return,但如果我没记错的话,return 只会停止当前方法的执行。谢谢。
【问题讨论】:
【参考方案1】:我将在您的基类ValidateAndSave
中创建一个方法,从事件处理程序中调用它:
protected void ValidateAndSave()
if (this.PerformValidations())
this.Save();
private void buttonSave_Click(object sender, EventArgs e)
this.ValidateAndSave();
protected bool PerformValidations()
/* could be virtual, if you want to do additional checks in derived classes */
...
protected virtual void Save()
...
如果所有验证都正常,您让PerformValidations
返回true
。然后调用 save,你可以在派生类中覆盖它。
【讨论】:
非常感谢您描述的方法。这很有道理。谢谢。以上是关于Windows 窗体 - 如何中断当前正在执行的代码的执行的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Windows 窗体应用程序中获取 *** 用户的当前用户身份?
在 Windows 窗体的 HttpClient 类中使用 DelegatingHandler - 内部处理程序尚未设置