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