C# 在表单中使用另一个表单中的值

C# 在表单中使用另一个表单中的值,c#,C#,我有两种表格: 表格一及表格二 在表格1中我有所有的值,在表格2中我有一个图表 如何在Form2中使用form1的值而不出现此错误? 我尝试使用此代码,但无效: 表格2: public partial class Form2 : Form1 { public Form2() { InitializeComponent(); } } 在表格1中: private void graphe_Click(obje

我有两种表格:

表格一及表格二

在表格1中我有所有的值,在表格2中我有一个图表

如何在Form2中使用form1的值而不出现此错误?

我尝试使用此代码,但无效:

表格2:

public partial class Form2 : Form1
    {
        public Form2()
        {
            InitializeComponent();

        }
    }
在表格1中:

private void graphe_Click(object sender, EventArgs e)
        {
            Form f = new Form2();
            f.ShowDialog();
            Form f2 = new Form1();
            f2.Hide();
        }

以类似的格式2创建构造函数

private Form1 _obj1;

public Form2(Form1 obj1)
{
    _obj1 = obj1;
}
现在您可以将form1的所有属性访问到form2

在创建form1的对象时,可以使用在form2中创建的新构造函数,如

Form f = new Form2(this);
f.ShowDialog();

无需继承form1

尝试创建一些中间类,并在
Form2
form1
的重载构造函数中传递它的实例,如:

public partial class Form2 : Form1
{
    public Form2(IList<string> storage) 
        : base(storage)
    {
        InitializeComponent();
    }
}

public partial class Form1 : Form
{
    protected readonly IList<string> _storage ;
    public Form1(IList<string> storage)
    {
        InitializeComponent();
        _storage = storage;
    }
}
公共部分类Form2:Form1
{
公共表格2(IList存储)
:基本(存储)
{
初始化组件();
}
}
公共部分类Form1:Form
{
受保护的只读IList_存储;
公共表格1(IList存储)
{
初始化组件();
_储存=储存;
}
}
用法:

var storage = new List<string>();
Form f = new Form2(storage);
f.ShowDialog();
Form f2 = new Form1(storage);
f2.Hide();
var存储=新列表();
表格f=新表格2(储存);
f、 ShowDialog();
表格f2=新表格1(存储);
f2.隐藏();

存储可能比仅仅是一个
列表
更复杂、更实用。它也可以在其他对象之间共享,如“Form3”等。

“它不起作用”对任何类型的问题都不是一个很有用的描述。我的意思是我试图在form2中继承form1,但看看发生了什么@phoenixReborn的图片。理想情况下,你应该为form1创建一个接口,例如
form1
,并参考form2中的接口。这有助于解耦对象并使单元测试更容易。从概念上讲,Form2可能不关心它从什么类型的对象获取数据,所以不应该将它约束为具体的类型。你是对的,但这只是初学者非常简单的解决方案。这如何允许Form2实例访问Form1实例上的属性?我在这里看到的是Form2继承自Form1。@DeanOC,它只是访问一些公共数据,而不是
Form1
的属性。我担心将
Form1
实例传递给
Form2
构造函数可能会导致扩展性问题。@user1951045,很抱歉,我忘记在用法示例中传递构造函数中的
storage