是否存在从Windows窗体中的自定义对话框返回值的标准方法?
时间:2020-03-05 18:45:41 来源:igfitidea点击:
因此,现在我的项目中有一些自定义对话框,它们可以执行类似提示用户生日的操作。现在,他们在做的事情就是设置一个this.Birthday
属性(一旦他们得到答案)(类型为" DateTime?",null表示"取消")。然后,调用者检查其创建的对话框的"生日"属性,以弄清用户的回答。
我的问题是,做这样的事情是否有更标准的模式?我知道我们可以为基本的确定/取消设置" this.DialogResult",但是Windows窗体中是否有更通用的方式来指示"这里是我收集的数据"?
解决方案
回答
我一直按照我们描述的方式来做。我很好奇,看看是否有一种更受欢迎的方法。
回答
is there a more standard pattern for doing stuff like this?
不,听起来我们使用的是正确的方法。
如果对话框返回DialogResult.OK,则假定对话框中所有必需的属性均有效。
回答
我想说的是,在自定义对话框上公开属性是惯用的方法,因为这是标准对话框(如Select / OpenFileDialog)的方式。有人可能会说拥有ShowBirthdayDialog()方法可以返回我们要查找的结果,这是更明确的意图,但遵循框架的模式可能是明智的选择。
回答
对于我来说,坚持使用Dialog返回标准对话框响应,然后通过属性访问结果是可行的方法。
我坐在哪儿有两个很好的理由:
- 一致性-我们总是在对话中做同样的事情,问题的本质暗示模式是好的(-:尽管同样的问题是这是否是一个好的模式?
- 它允许从对话框中返回多个值-好的,这里也进行了全新的讨论,但是应用实用主义意味着在某些情况下这并不总是适合或者希望打包值以便我们可以将其传递回去的情况。一口气。
逻辑流程也很好:
if (Dialog == Ok) { // Do Stuff with the entered values } else { // Respond appropriately to the user cancelling the dialog }
我们应该问这样的问题,这是一个好问题,但对我来说,当前的模式是一个不错的模式。
墨菲
回答
对于模式输入对话框,我通常会重载ShowDialog并为我需要的数据传递参数。
DialogResult ShowDialog(out datetime birthday)
我通常会发现,与将我的属性与Form类公开的100多种属性混合在一起相比,发现和理解更加容易。
对于表单,我通常具有一个Controller和一个IView接口,该接口使用只读属性来传递数据。