簡體   English   中英

C#如何從表單返回結果

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM