簡體   English   中英

將數據從form2傳遞到form1並將其保存在字符串變量中

[英]passing data from form2 into form1 and save it in a string variable

我通過第二個構造函數將文本從Form2傳遞到Form1。

之后,我想將Form2中的文本框值設置為Form1中的全局字符串變量。

如果我這樣做,全局變量得到我想要的值,但不是那么久。 關閉Form2對話框(代碼進行后的this.Close()之后,主構造函數執行了一次,我丟失了全局字符串變量的值...

我有一個解決方法,我將文本框值保存到文本文件中並讀取它,如果我想要它的值,但這不是我正在尋找的解決方案。

有幾種方法可以實現這一目標。 您可以將靜態屬性存儲在靜態類中,將靜態屬性/屬性存儲在表單類中,也可以將值存儲在集合中。

例1

具有靜態屬性的靜態類。

資源:

public static class FormValues
{
    private static string _message;
    public static string Message
    {
        get { return _message; }
        set
        {
            // Do stuff with value ...
            // Handle any errors with the value ...
            // Throwing an exception here will tell you which form it was thrown at too ...
            _message = value;
        }
    }
}

用法:

// Form1
FormValues.Message = "Hello Form2";

// Form2
string message = FormValues.Message;

例2

表單中的屬性。

資源:

// Form1 etc.
public static string Form1GlobalMessage { get; private set; }
public string Form1Message { get; private set; }

用法:

// Form1
Form1Message = "This message is unique to this instance.";
Form1GlobalMessage = "This message is shared by all Form1 instances.";

// Form2
var form1 = new Form1();
string uniqueMessage = form1.Form1Message;
string globalMessage = Form1.Form1GlobalMessage;

以上所有表格都可以使用,您可以隨意使用。 這只能在表單之外讀取,因為只有Form1才能修改屬性。 如果您想要從多個表單中獲取和設置這樣的內容,請參閱示例1

例3

價值收集。

在我看來,這應該是最少使用的解決方案,並且只應在您希望通過動態標識獲取/設置動態值時使用。 示例1示例2可以用作實現集合的位置的參考。 而不是你剛剛放置一個集合的屬性。 Dictionary<TKey,TValue>

資源:

// Example for the static class
public static class FormValues
{
    private static Dictionary<string,string> _messages;
    static FormValues()
    {
        _messages = new Dictionary<string, string>();
    }

    public static Dictionary<string,string> Messages
    {
        get { return _messages; }
    }
}

用法:

// Form1
FormValues.Messages.Add("Message", "Hello World!");
// Form2
string message = FormValues.Messages["Message"];

當然還有很多其他方法可以實現這些機制,這一切都取決於你正在做什么和想做什么,以這種方式你做到這一點。

然而,這應該有助於您理解這個概念。

我認為你需要Form2中的公共財產。 我過去做過這個(這很容易並且運行良好),但我發布的內容不是經過測試的代碼。 它應該讓你開始。

FORM 2 CODE: public string CommunicationStuff {get;set;} // private set // if one-way communication CommunicationStuff = myTextBox.Text;

然后在form1之后調用form2並關閉它,你可以說

FORM1代碼: Form2 subform = new Form2; subform.CommunicationStuff = "Default value based on program state"; subform.ShowDialog(); string results = subform.CommunicationStuff; Form2 subform = new Form2; subform.CommunicationStuff = "Default value based on program state"; subform.ShowDialog(); string results = subform.CommunicationStuff;

編輯:在搜索示例時,我發現了這個帖子: 如何從C#中的表單返回一個值?

我建議您使用專用於存儲和傳遞配置值的類。 在下面的示例中,您有一個單例,可用於保存和檢索變量“Environment”的值:

public class GUIHelper
{
    public static GUIHelper _instance = new GUIHelper();
    public static GUIHelper Instance { get { return _instance; }}
    public string Environment { get; set; }
}

public class Form2
{
    public TextBox TextBox = new TextBox();
    public Form2()
    {
        TextBox.Text = GUIHelper.Instance.Environment;
    }
}

您甚至可以進一步將文本框的值綁定到GUIHelper的屬性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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