将数据从form2传递到form1并将其保存在字符串变量中

时间:2015-03-17 16:03:55

标签: c#

我通过第二个构造函数将文本框架中的数据从Form2传递到Form1。

之后,我想将Form2中的文本框值设置为Form1中的全局字符串变量。

如果我这样做,全局变量会得到我想要的值,但不会那么久。在代码完成后关闭Form2对话框(this.Close())之后,主构造函数再次执行,我将丢失全局字符串变量的值...

我有一个解决方法,我将文本框值保存到文本文件中,如果我想要其中的值,则读取它,但这不是我正在寻找的解决方案。

3 个答案:

答案 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的属性。