.net 在Windows窗体中是否有从自定义对话框返回值的标准方法?

.net 在Windows窗体中是否有从自定义对话框返回值的标准方法?,.net,winforms,user-interface,.net,Winforms,User Interface,所以现在我的项目有一些自定义对话框,可以提示用户生日,或者其他什么。现在他们只是在得到答案后设置this.birth属性(类型为DateTime?,null表示“取消”)。然后,调用者检查它创建的对话框的生日属性,以了解用户回答了什么 我的问题是,有没有更标准的模式来做这样的事情?我知道我们可以为基本的OK/Cancel设置这个。DialogResult,但是在Windows窗体中是否有一种更通用的方式来表示“这是我收集的数据”我总是按照您描述的方式来做。我很想知道是否有一种更被接受的方法 这样

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


我的问题是,有没有更标准的模式来做这样的事情?我知道我们可以为基本的OK/Cancel设置
这个。DialogResult
,但是在Windows窗体中是否有一种更通用的方式来表示“这是我收集的数据”

我总是按照您描述的方式来做。我很想知道是否有一种更被接受的方法

这样做有没有更标准的模式

不,听起来你用的方法是对的


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

我认为在自定义对话框中公开属性是惯用的方法,因为标准对话框(如Select/OpenFileDialog)就是这样做的。有人可能会说,使用ShowBirthdayDialog()方法返回您要查找的结果更显式,也更能揭示您的意图,但是遵循框架的模式可能是明智的做法。

对于我来说,坚持对话框返回标准对话框响应,然后通过属性访问结果是明智的做法

我坐在这里有两个很好的理由:

  • 一致性-你总是在对话中做同样的事情,问题的本质表明模式是好的(-:尽管同样的问题是这是否是一个好的模式
  • 它允许从对话框返回多个值-好的,这里也有全新的讨论,但应用实用主义意味着这是一个人想要的,在某些情况下,打包值并不总是合适或可取的,这样你就可以一次将它们全部传回
  • 逻辑流程也很好:

    if (Dialog == Ok)
    {
        // Do Stuff with the entered values
    }
    else
    {
        // Respond appropriately to the user cancelling the dialog
    }
    
    这是一个很好的问题——我们应该问这样的问题——但对我来说,目前的模式是一个不错的模式


    Murph

    对于模式输入对话框,我通常会重载ShowDialog并为所需的数据传递参数

    DialogResult ShowDialog(out datetime birthday)
    
    我通常发现,与将我的属性与Form类公开的100+混合相比,更容易发现和理解


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

    如果让ShowBirthdayDialog()方法返回是否返回了Cancel或OK,则更为实用。根据框架的模式使用属性肯定更好。回答得好。