我正在编写自定义InputBox
,因为我不想使用VB框。所以我想让表单在关闭时返回框的结果。
我在表单的代码中添加了一个重载:
public InputBox()
{
InitializeComponent();
}
public string InputBox(string LabelText, string Title, string DefaultResult)
{
return DefaultResult;
}
这是一个好方法还是应该或者我可以修改构造函数?感谢。
答案 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();
}
请注意,我不鼓励使用此方法,因为使用此表单的唯一合理方式更可能是模式对话框,这可能会使该类用户感到困惑。
使用简单的静态方法(使用私有构造函数,因此表单无法以任何其他方式由调用者实例化)对此更有意义,因为它不会强制调用者知道表单的形式旨在使用:只有一种可能的方式使用它。