C#如何从Form返回结果

时间:2016-05-01 04:37:07

标签: c# winforms visual-studio

我正在编写自定义InputBox,因为我不想使用VB框。所以我想让表单在关闭时返回框的结果。

我在表单的代码中添加了一个重载:

public InputBox()
{
    InitializeComponent();
}

public string InputBox(string LabelText, string Title, string DefaultResult)
{
    return DefaultResult;
}

这是一个好方法还是应该或者我可以修改构造函数?感谢。

1 个答案:

答案 0 :(得分:3)

就个人而言,对于这些"实用程序"通常是模态的表单,我更喜欢使用static路由,将构造函数设为私有。类似的东西:

private InputBox() // Constructor is private
{
    InitializeComponent();
}

public static string GetValue(string LabelText, string Title, string DefaultResult)
{
    using(var form = new InputBox())
    {
       form.myLabel.Text = labelText;
       form.Text = Title;
       form.myTextBox.Text = DefaultResult;
       if(form.ShowDialog() == DialogResult.OK)
         return form.myTextBox.Text;
    }
    return DefaultResult;
}

然后使用它:

string myValue = InputBox.GetValue("foo","bar","baz");

根据评论中的要求,这里有一些其他的方法,不使用static方法......它基本相同,但是你将表单的处理权交给调用者:

InputBox课程中:

private string _defaultResult;

public InputBox(string LabelText, string Title, string DefaultResult)
{
    InitializeComponent();
    myLabel.Text = LabelText;
    Text = Title;
    _defaultResult = myTextBox.Text = DefaultResult;
}

public string GetValue()
{
    return this.DialogResult == DialogResult.OK ? myTextBox.Text : _defaultResult;
}

在来电者身上:

string myValue = "baz";
using(var form = new InputBox("foo", "bar", myValue))
{
   form.ShowDialog();
   myValue = form.GetValue();       
}

请注意,我不鼓励使用此方法,因为使用此表单的唯一合理方式更可能是模式对话框,这可能会使该类用户感到困惑。

使用简单的静态方法(使用私有构造函数,因此表单无法以任何其他方式由调用者实例化)对此更有意义,因为它不会强制调用者知道表单的形式旨在使用:只有一种可能的方式使用它。