6

所以现在我的项目有一些自定义对话框可以做一些事情,比如提示用户他的生日,或者其他什么。现在他们只是做一些事情,比如this.Birthday一旦他们得到一个答案就设置一个属性(它的类型是DateTime?,null 表示“取消”)。然后调用者检查Birthday它创建的对话框的属性以确定用户回答了什么。

我的问题是,有没有更标准的模式来做这样的事情?我知道我们可以设置this.DialogResult基本的确定/取消内容,但是在 Windows 窗体中是否有更通用的方式来指示“这是我收集的数据”?

4

5 回答 5

9

我想说在自定义对话框上公开属性是惯用的方式,因为标准对话框(如 Select/OpenFileDialog)就是这样做的。有人可能会争辩说,拥有一个返回您正在寻找的结果的 ShowBirthdayDialog() 方法更加明确和意图揭示,但遵循框架的模式可能是明智的做法。

于 2008-08-31T17:50:56.620 回答
3

有没有更标准的模式来做这样的事情?

不,听起来您使用的是正确的方法。

如果对话框返回 DialogResult.OK,则假定对话框中所有必要的属性都有效。

于 2008-08-31T17:36:44.080 回答
2

对我来说,坚持使用对话框返回标准对话框响应,然后通过属性访问结果是要走的路。

我坐的两个很好的理由:

  1. 一致性——你总是在对话中做同样的事情,问题的本质表明模式是好的(-:虽然同样的问题是这是否是一个好的模式?
  2. 它允许从对话框中返回多个值 - 好的,这里也有全新的讨论,但应用实用主义意味着这是人们在某些情况下想要的,它并不总是合适或不希望将值打包,以便您可以将它们传回一口气。

逻辑流程也很好:

if (Dialog == Ok)
{
    // Do Stuff with the entered values
}
else
{
    // Respond appropriately to the user cancelling the dialog
}

这是一个很好的问题——我们应该质疑这样的事情——但对我来说,目前的模式是一个不错的模式。

墨菲

于 2008-08-31T18:20:13.960 回答
1

对于模态输入对话框,我通常重载 ShowDialog 并为我需要的数据传递参数。

DialogResult ShowDialog(out datetime birthday)

我通常发现发现和理解与将我的属性与 Form 类公开的 100 多个属性混合起来更容易。

对于表单,我通常有一个控制器和一个使用只读属性传递数据的 IView 接口。

于 2008-08-31T19:14:18.900 回答
0

我一直都是按照你描述的方式做的。我很好奇是否有更被接受的方法。

于 2008-08-31T17:29:29.713 回答