如何从Form1访问位于Form2中的类值?C#
我有一个简短的问题。我在Form2中创建了一个名为“MyObject”的类,其中包含两个变量。按下一个按钮,表2中的变量就改变了。现在我的问题是如何在Form1中检索MyObject?以下是我的示例代码: 表格1 表格2 谢谢大家做这个 表格1 表格2 肌体如何从Form1访问位于Form2中的类值?C#,c#,forms,class,C#,Forms,Class,我有一个简短的问题。我在Form2中创建了一个名为“MyObject”的类,其中包含两个变量。按下一个按钮,表2中的变量就改变了。现在我的问题是如何在Form1中检索MyObject?以下是我的示例代码: 表格1 表格2 谢谢大家做这个 表格1 表格2 肌体 public class MyObject { public int Value1 { get; set; } public int Value2 { get; set; } } 您不应该在Form2中定义MyObjec
public class MyObject
{
public int Value1 { get; set; }
public int Value2 { get; set; }
}
您不应该在
Form2
中定义MyObject
。你应该把它放在自己的档案里。您几乎总是希望每个类都有自己的文件
您还应该给MyObject
起一个更好的名字;更能描述其实际功能的东西
最后,要真正传递数据,一种简单有效的方法是在Form2
上创建一个属性:
public MyObject PropertyName {get; private set;}
(不要忘记将属性重命名为更好的名称。)
然后,您可以在Form2
中设置它,方法是说ProperyName=newmyobject()代码>
然后,您可以使用f.PropertyName
从Form1
访问该属性(在调用ShowDialog
之后)。我建议将其设置为属性,并在其他地方声明MyObject类,该类不在Form2类中。它可以在同一个文件中,但请确保类定义是不同的。属性比GetMethods更容易处理,但对跨平台或远程处理不太有用,方法比通过反射访问属性更容易。我使用的是Nikhil Agrawal的解决方案,它工作正常。为什么-1?我不知道如何提问,所以每个人都应该喜欢!为此,我得到了一个错误(错误在Form1中):找不到类型或命名空间名称“MyObject”(是否缺少using指令或程序集引用?)@阿米尔:您必须在同一个cs文件或某个新的cs文件中编写MyObject类。我将其放在一个新的cs文件中,该错误消失了,但我在Form2中遇到了一个关于GetMyObject的新错误:可访问性不一致:返回类型“WindowsFormsApplication3.MyObject”的可访问性不如方法“WindowsFormsApplication3.Form2.GetMyObject()“尽管这段代码在我这方面运行良好,但我还是做了一些更改。我已将GetMyObject作为属性而不是函数。问题是我原始扩展代码中的类值包含30多个变量,我想将所有变量一次转换为1。@阿米尔,这是相当多的,因此可能存在一些潜在问题。可能是这些变量中的许多实际上应该在单个集合中,或者您应该有一个或多个额外的复杂类型来封装这些变量。(或两者的某种组合。)如果你描述了它们是什么,我们可能会对此有所帮助。
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Form2 f = new Form2(this);
f.ShowDialog();
MyObject mo = f.GetMyObject;
}
public Form2(Form1 frm1)
{
InitializeComponent();
}
public MyObject GetMyObject
{
get
{
return obj;
}
}
MyObject obj;
private void button1_Click(object sender, EventArgs e)
{
obj = new MyObject();
obj.Value1 = 102;
obj.Value2 = 50;
}
public class MyObject
{
public int Value1 { get; set; }
public int Value2 { get; set; }
}
public MyObject PropertyName {get; private set;}