是否可以重载ShowDialog(),以便子表单作为out参数返回信息?

Mus*_*sis 4 .net c# winforms

在之前关于如何从对话框窗口返回字符串的问题中,yapiskan建议重载子窗体的ShowDialog()方法以包含out参数.

我的问题是这是否是C#中的一个好方法.

这是一些示例代码,基于yapiskan的建议.在子窗体中(在此示例中,它是一个带有文本框的窗体),您只需添加ShowDialog重载并将UI值分配给out参数:

public DialogResult ShowDialog(out string s)
{
    DialogResult result = this.ShowDialog();
    s = this.textBox1.Text;
    return result;
}
Run Code Online (Sandbox Code Playgroud)

要显示表单并检索输入的文本,请执行以下操作:

using (CustomDialog frm = new CustomDialog())
{
    string s;
    if (frm.ShowDialog(out s) == DialogResult.OK)
    {
        // do something with s
    }
}
Run Code Online (Sandbox Code Playgroud)

我能想到的一个优点是,这种方法迫使CustomDialog表单的用户通过表单的ShowDialog方法获取它所包含的信息(而不是来自知道它的所谓方法,如GetMyData()或其他东西) .

Pat*_*ins 7

最好有一个公共属性/方法并获取信息.

如果你需要3..4..5个信息,有5个参数,你会怎么做?更干净,有访问器从Dialog获取您的信息.


Ser*_*gel 5

它应该不行,因为.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);
Run Code Online (Sandbox Code Playgroud)