所以现在我的项目有一些自定义对话框,用于提示用户过生日等等。现在他们只是做了一些事情,比如设置一个this.Birthday
属性一旦得到答案(类型为DateTime?
,空值表示“取消”)。然后调用者检查它创建的对话框的Birthday
属性,以找出用户回答的内容。
我的问题是,是否有一个更标准的模式来做这样的事情?我知道我们可以设置this.DialogResult
基本确定/取消的东西,但有更通用的方式在Windows窗体中的表单,以指示“这是我收集的数据”?
答案 0 :(得分:9)
我想说在自定义对话框中公开属性是惯用的方法,因为标准对话框(如Select / OpenFileDialog)就是这样做的。有人可能会争辩说,有一个ShowBirthdayDialog()方法返回你正在寻找的结果是更明确和意图揭示,但遵循框架的模式可能是明智的选择。
答案 1 :(得分:3)
是否有更标准的模式来做这样的事情?
不,听起来你正在使用正确的方法。
如果对话框返回DialogResult.OK,则假定对话框中的所有必要属性都有效。
答案 2 :(得分:2)
对于我坚持使用Dialog返回标准对话框响应然后通过属性访问结果是可行的方法。
我坐的地方有两个很好的理由:
逻辑流程也很好:
if (Dialog == Ok)
{
// Do Stuff with the entered values
}
else
{
// Respond appropriately to the user cancelling the dialog
}
这是一个很好的问题 - 我们应该质疑这样的事情 - 但对我来说,目前的模式是不错的。
墨菲
答案 3 :(得分:1)
对于模态输入对话框,我通常会重载ShowDialog并为我需要的数据传递params。
DialogResult ShowDialog(out datetime birthday)
我通常发现,将我的属性与Form类公开的100+混合后,更容易发现和理解。
对于表单,我通常有一个Controller和一个IView接口,它使用readonly属性来传递数据。
答案 4 :(得分:0)
我总是按照你描述的方式完成它。我很想知道是否有更接受的方法。