我通过第二个构造函数将文本框架中的数据从Form2传递到Form1。
之后,我想将Form2中的文本框值设置为Form1中的全局字符串变量。
如果我这样做,全局变量会得到我想要的值,但不会那么久。在代码完成后关闭Form2对话框(this.Close()
)之后,主构造函数再次执行,我将丢失全局字符串变量的值...
我有一个解决方法,我将文本框值保存到文本文件中,如果我想要其中的值,则读取它,但这不是我正在寻找的解决方案。
答案 0 :(得分:2)
有几种方法可以实现这一目标。您可以将静态属性存储在静态类中,将静态属性/属性存储在表单类中,也可以将值存储在集合中。
示例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"];
当然还有很多其他方法可以实现这些机制,这一切都取决于你做了什么和想要做什么,以这种方式做到这一点。
然而,这应该有助于您理解这个概念。
答案 1 :(得分:1)
我认为你需要Form2中的公共属性。我过去做过这个(这很容易并且运行良好),但我发布的内容不是经过测试的代码。它应该让你开始。
FORM 2代码:
public string CommunicationStuff {get;set;} // private set
// if one-way communication
CommunicationStuff = myTextBox.Text;
然后在调用form2之后在form1中关闭,你可以说
FORM1代码:
Form2 subform = new Form2;
subform.CommunicationStuff = "Default value based on program state";
subform.ShowDialog();
string results = subform.CommunicationStuff;
编辑:在搜索示例时,我发现了这个帖子:How to return a value from a Form in C#?
答案 2 :(得分:0)
我建议您使用专用于存储和传递配置值的类。在下面的示例中,您有一个单例,可用于保存和检索变量的值&#34; Environment&#34; :
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的属性。