[英]C# How to return result from Form
我正在編寫自定義InputBox
因為我不想使用VB框。 所以我想讓表單在關閉時返回框的結果。
我在表單的代碼中添加了一個重載:
public InputBox()
{
InitializeComponent();
}
public string InputBox(string LabelText, string Title, string DefaultResult)
{
return DefaultResult;
}
這是一個好方法還是應該或者我可以修改構造函數? 謝謝。
就個人而言,對於通常是模態的這類“實用”形式,我更喜歡走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();
}
請注意,我不鼓勵使用此方法,因為使用此表單的唯一合理的方法更有可能是模式對話框,這可能會使類的用戶感到困惑。
擁有簡單的靜態方法(使用私有構造函數,以便調用者無法以其他任何方式實例化表單)對此更加有意義,因為它不會迫使調用者知道如何設計表單的使用方式:只是一種可能的使用方式。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.