在WinForms中设计可取消的操作(保存挂起的更改)

时间:2012-07-18 08:24:51

标签: c# .net winforms

我们正在开发一个使用一些自定义控件的.NET应用程序。

一个特定的控件是一个简单的“文本编辑器”,如控件,根据用户的选择加载一些内容。

如果用户修改此控件中的文本,然后进行不同的选择以覆盖该内容,我们希望通常的弹出窗口说“您要保存挂起的更改吗?是/否/取消”

我正在考虑应用程序的哪个级别应该是负责的:控件本身或使用它的代码?

我一直在研究现有的CancelEventArgs类,并考虑使用它,但我不确定这是否适合这种特定情况。

我想到的示例代码:

设置自定义控件的文本时,请引发“BeforeChanged”事件。这将被处理并允许取消操作。

public void SetText(string text)
{
    CancelEventArgs args = new CancelEventArgs();

    // Raise the BeforeTextChanged event.
    BeforeTextChanged(args);

    // If the user cancelled the operation - do not modify text.
    // For example, user code will check if needs saving, show the popup, etc.
    if (args.Cancel)
    {
        return;
    }
}

2 个答案:

答案 0 :(得分:1)

我认为你不需要用事件来解决这个问题 - 这只会使问题复杂化。这是线性问题,对话框弹出窗口将暂停当前线程并为您提供足够的控制来处理用户的决定。此方案中的事件是“UserSelectionChanged”事件。不需要更多。

答案 1 :(得分:1)

在两种情况下看起来都不错,但要保持逻辑的一致性;如果您已在用户控件内部封装了文件loading / contexts,则保留use事件。否则,在目标表格/控件上处理。