将对象传递给不同的窗体

时间:2010-06-02 11:54:08

标签: c# winforms

我想在win表单之间传递一个C#对象。目前,我已经设置了一个基本项目来学习如何执行此操作,该项目由两个形式组成 - form1和form2以及一个名为class1.cs的类,其中包含get和set方法,用于在form1中输入值设置字符串变量。 (表单2应该获取存储在class1对象中的值)

如何从form1中设置的对象中获取字符串值?我是否需要将其作为参数传递给form2?

任何评论/帮助都将被指定!

谢谢,

编辑:这是我目前的代码:(form1.cs)

    private void button1_Click(object sender, EventArgs e)
    {
        this.Hide();

        Form2 form2 = new Form2();

        form2.Show();
    }

    private void button2_Click(object sender, EventArgs e)
    {
        if (textBox1.Text != "")
        {
            Class1 class1 = new Class1();

            class1.setStringValue(textBox1.Text);
        }
    }
}

}

3 个答案:

答案 0 :(得分:9)

有几种不同的方法可以使用静态类对象,上面的例子非常适合这种活动。

public static class MyStaticClass
{
  public static string MyStringMessage {get;set;}
}

您不需要实例化该类,只需将其调用

即可
MyStaticClass.MyStringMessage = "Hello World";
Console.WriteLine (MyStaticClass.MyStringMessage);

如果需要对象的实例,可以使用以下内容将在Form1上创建的类对象传递给Form2。

private void button1_Click(object sender, EventArgs e)
    {
        this.Hide();
        Form2 form2 = new Form2();
        form2.MyClass = class1;
        form2.Show();
    }

然后在Form2上创建一个属性以接受类对象。

public Class1 MyClass {get;set;}

请记住将Class1对象设为全局变量,而不是在按钮2本身内创建它。

答案 1 :(得分:4)

是的,在Form1中,您声明了Class1的实例,然后根据需要设置参数,然后将其传递给Form2。例如,你可以在Form2中有一个构造函数,并在其中有一个Class1参数。假设Form1创建了Form2,否则你必须有一些方法让Form1找到Form2来传递实例。

答案 2 :(得分:0)

自从最近几年我一直在ASP.Net工作以来,我发现自己经常与Newtonsoft.Json合作。事实证明,这在WinForms中也很不错,在这种情况下,似乎简化了在窗体之间传递对象的操作……即使是复杂的对象也很容易!

实现是这样的:

// Set Object Property within Form
 public partial class FlashNotify : Form
 {
     public string Json { get; set; }
 }

然后在表单加载事件中,您可以抓取对象:

 private void FlashNotify_Load(object sender, EventArgs e)
 { 
    // Deserialize from string back to object
    CommUserGroupMessage msg = new CommUserGroupMessage();
    msg = Newtonsoft.Json.JsonConvert.DeserializeObject<CommUserGroupMessage>(Json);
 }

最近将对象传递给以下形式:

// Serialize the Object into a string to pass
 string json = Newtonsoft.Json.JsonConvert.SerializeObject(msg);
 FlashNotify fn = new FlashNotify();
 fn.Json = json;
 fn.Show();

授予最初选择的答案可能会更容易,但是我喜欢这种方法,因为它避免了在表单中复制类的需要,我认为这样可以更轻松地维护更正:小姐正确地阅读了示例中的静态类,我最初认为它是在表格中复制的。)

相关问题