有状态的 Winform 和取消按钮

Posted

技术标签:

【中文标题】有状态的 Winform 和取消按钮【英文标题】:Stateful Winform and Cancel Buttons 【发布时间】:2012-05-30 18:16:58 【问题描述】:

随着表单/对话框底部的“确定”和“取消”按钮的流行,奇怪的是我似乎无法找到保存控制状态的“标准”方法。

例如,我有一个选中的过滤器列表框。当用户单击“确定”按钮时,它将过滤器应用于数据集并关闭表单。如果用户单击取消按钮,表单将撤消所有选中项的更改并关闭表单。

在理想情况下,当用户单击“确定”按钮时,保存的控件状态会被当前控件状态覆盖并设置新状态标志。当窗体正在关闭时,如果设置了新状态标志,则窗体将重置该标志,如果未设置,则窗体将显示的控件替换为保存的控件状态。这样,如果点击取消按钮,用户所做的所有检查更改都会被重置。

处理取消按钮以撤消对控件甚至整个表单的更改的最佳实践方法是什么?有最佳实践解决方案吗?我可以看到这对于文本框、单选按钮、复选框和几乎每个控件都是必需的,所以请尽量保持其通用性,而不是特定于选中的列表框。

【问题讨论】:

这是一个有趣的问题,但根据我的经验,我无法意识到您可以“保存”完整表单的状态,以便在用户取消操作时重新加载它。通常,当取消时,我们会丢弃更改而不应用过滤器。或者,如果有几个控件,只需使用变量来跟踪每个控件的旧值。 这个问题可能更适合姐妹网站Software Engineering,你想让我迁移它吗? 【参考方案1】:

我建议它很简单:

将反映在 UI 中的数据与 UI 本身分开 加载表单时,根据数据设置其内容 当用户单击“确定”时,保存对数据模型的更改(无论如何,这将取决于您填充模型的方式) 当用户单击“取消”时,不要保存任何更改

没有必要“撤消”取消时的更改 - 您只需丢弃表单。当您下次要显示表单时,将加载与以前相同的数据,因为您没有保存任何更改。

【讨论】:

【参考方案2】:

简单的方法:不要重复使用表单实例。在每个childForm.Show(); 之前做var childForm = new MyChildForm();

【讨论】:

以上是关于有状态的 Winform 和取消按钮的主要内容,如果未能解决你的问题,请参考以下文章

Swift - 处理表格视图多个部分的自定义复选标记按钮状态

按下另一个按钮后,列表磁贴按钮会更改状态

C# 在Winform设计一个耗时较久的任务在后台执行时的状态提示窗口

当我滚动列表视图单选按钮被自动选择或取消选择无法保持单选按钮的状态

UITableViewCell 按钮在滚动之前不显示选中或取消选中状态

vue 表格数据编辑,点击取消或者完成按钮后,关闭编辑状态没有及时生效