在之前关于如何从对话框窗口返回字符串的问题中,yapiskan建议重载子窗体的ShowDialog()方法以包含out参数.
我的问题是这是否是C#中的一个好方法.
这是一些示例代码,基于yapiskan的建议.在子窗体中(在此示例中,它是一个带有文本框的窗体),您只需添加ShowDialog重载并将UI值分配给out参数:
public DialogResult ShowDialog(out string s) { DialogResult result = this.ShowDialog(); s = this.textBox1.Text; return result; }
要显示表单并检索输入的文本,请执行以下操作:
using (CustomDialog frm = new CustomDialog()) { string s; if (frm.ShowDialog(out s) == DialogResult.OK) { // do something with s } }
我能想到的一个优点是,这种方法迫使CustomDialog表单的用户通过表单的ShowDialog方法获取它所包含的信息(而不是来自知道它的所谓方法,如GetMyData()或其他东西) .
最好有一个公共属性/方法并获取信息.
如果你需要3..4..5个信息,有5个参数,你会怎么做?更干净,有访问器从Dialog获取您的信息.
它应该不行,因为.net框架不使用此设计.在OpenFileDialog类的情况下,它有一个无参数的ShowDialog()方法返回一个DialogResult.调用此方法后,用户应使用FileName,FileNames,SafeFileName和SafeFileNames方法获取所选文件.
让我们假设这是以"out参数"的方式实现的.我必须编写这样的代码才能得到SafeFileName:
string dummyFileName; string[] dummyFileNames; string safeFileName; string[] dummySafeFileNames; myDialog.ShowDialog(out dummyFileName, out dummyFileNames, out safeFileName, out dummySafeFileNames);