是否有一种标准方法可以从Windows窗体中的自定义对话框返回值?

时间:2008-08-31 17:28:11

标签: .net winforms user-interface

所以现在我的项目有一些自定义对话框,用于提示用户过生日等等。现在他们只是做了一些事情,比如设置一个this.Birthday属性一旦得到答案(类型为DateTime?,空值表示“取消”)。然后调用者检查它创建的对话框的Birthday属性,以找出用户回答的内容。

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

5 个答案:

答案 0 :(得分:9)

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

答案 1 :(得分:3)

  

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

不,听起来你正在使用正确的方法。

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

答案 2 :(得分:2)

对于我坚持使用Dialog返回标准对话框响应然后通过属性访问结果是可行的方法。

我坐的地方有两个很好的理由:

  1. 一致性 - 你总是用对话做同样的事情,问题的本质表明模式是好的( - :同样问题是这是否是一个好的模式?
  2. 它允许从对话框中返回多个值 - 好吧这里也有全新的讨论,但应用实用主义意味着这是在某些情况下人们想要的并不总是适合或者希望将值打包以便你可以通过他们一气呵成地回来了。
  3. 逻辑流程也很好:

    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)

我总是按照你描述的方式完成它。我很想知道是否有更接受的方法。