C#如何从表单返回结果
我正在编写一个自定义的C#如何从表单返回结果,c#,winforms,visual-studio,C#,Winforms,Visual Studio,我正在编写一个自定义的输入框,因为我不想使用VB框。因此,我希望表单在关闭时返回框的结果 我在表单的代码中添加了一个重载: public InputBox() { InitializeComponent(); } public string InputBox(string LabelText, string Title, string DefaultResult) { return DefaultResult; } 这是一个好方法还是我应该或者可以修改构造函数?谢谢。就我个人
输入框
,因为我不想使用VB框。因此,我希望表单在关闭时返回框的结果
我在表单的代码中添加了一个重载:
public InputBox()
{
InitializeComponent();
}
public string InputBox(string LabelText, string Title, string DefaultResult)
{
return DefaultResult;
}
这是一个好方法还是我应该或者可以修改构造函数?谢谢。就我个人而言,对于这些典型的模态“实用”形式,我更喜欢走
静态
路线,让构造函数私有化。比如:
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");
根据评论中的要求,这里有一些其他的方法来实现这一点,而不使用
静态
方法。。。基本上是一样的,但是您将表单的处理交给了调用者:
string myValue = "baz";
using(var form = new InputBox("foo", "bar", myValue))
{
form.ShowDialog();
myValue = form.GetValue();
}
在您的输入框中
类:
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();
}
请注意,我不鼓励使用这种方法,因为使用这种表单的唯一合理的方法很可能是模态对话框,这可能会让类的用户感到困惑
使用简单的静态方法(使用私有构造函数,因此调用方不能以任何其他方式实例化表单)对此更有意义,因为它不会强迫调用方知道表单的设计用途:只有一种可能的使用方法。就我个人而言,对于这些典型的模态“实用”表单,我更喜欢使用
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");
根据评论中的要求,这里有一些其他的方法来实现这一点,而不使用
静态
方法。。。基本上是一样的,但是您将表单的处理交给了调用者:
string myValue = "baz";
using(var form = new InputBox("foo", "bar", myValue))
{
form.ShowDialog();
myValue = form.GetValue();
}
在您的输入框中
类:
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();
}
请注意,我不鼓励使用这种方法,因为使用这种表单的唯一合理的方法很可能是模态对话框,这可能会让类的用户感到困惑
使用简单的静态方法(带有私有构造函数,因此调用方不能以任何其他方式实例化表单)更有意义,因为它不会强迫调用方知道表单的设计用途:只有一种可能的使用方法。这看起来很棒!如果我重载
输入框
,结果会不一样吗?或者你不能重载这样的?定义“重载输入框”
,我不明白你的意思。如果你的意思是调用你的方法InputBox
,如果你的类名是InputBox
,你就不能这么做。。。试试看:它会给出一个编译错误(问题中的示例代码不会编译,因为你不能从构造函数返回,也不能命名其他方法,比如它们所属的类),即使你可以(你不能),这可能是一件非常糟糕的事。。。假设您将InputBox
静态方法放在InputBox.InputBox
命名空间中的InputBox
类上:您可能需要像var myValue=InputBox.InputBox.InputBox.InputBox(“foo”、“bar”、“baz”)那样调用它代码>哪一个更有可能成为解雇在任何一家体面公司制造代码的人的原因:-)啊哈,这正是我的问题。所以,除了使用你说的静态方法之外,没有其他方法了。好的,谢谢你的澄清,这对我来说很有意义。我确实接受了你的答案,并投了赞成票,因为它不仅解决了问题,而且很有启发性。这看起来很棒!如果我重载输入框
,结果会不一样吗?或者你不能重载这样的?定义“重载输入框”
,我不明白你的意思。如果你的意思是调用你的方法InputBox
,如果你的类名是InputBox
,你就不能这么做。。。试试看:它会给出一个编译错误(问题中的示例代码不会编译,因为你不能从构造函数返回,也不能命名其他方法,比如它们所属的类),即使你可以(你不能),这可能是一件非常糟糕的事。。。假设您将InputBox
静态方法放在InputBox.InputBox
命名空间中的InputBox
类上:您可能需要像var myValue=InputBox.InputBox.InputBox.InputBox(“foo”、“bar”、“baz”)那样调用它代码>哪一个更有可能成为解雇在任何一家体面公司制造代码的人的原因:-)啊哈,这正是我的问题。所以,除了使用你说的静态方法之外,没有其他方法了。好的,谢谢你的澄清,这对我来说很有意义。我确实接受了你的答案,并投了赞成票,因为它不仅解决了问题,而且很有启发性。