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