Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从Form1访问位于Form2中的类值?C#_C#_Forms_Class - Fatal编程技术网

如何从Form1访问位于Form2中的类值?C#

如何从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

我有一个简短的问题。我在Form2中创建了一个名为“MyObject”的类,其中包含两个变量。按下一个按钮,表2中的变量就改变了。现在我的问题是如何在Form1中检索MyObject?以下是我的示例代码:

表格1

表格2

谢谢大家

做这个

表格1

表格2

肌体

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;}