从另一种forms调用变量c#
我在Form1
有一个DataGridView
,我正在使用此代码显示另一个名为Generator
表单:
private void button1_Click(object sender, EventArgs e) { Form gen = new Generator(); // Form gen = new Generator(Form this); //* I tried this but is not working *// gen.Show(); }
在Generator
表单中,我需要读取或修改Form1
datagridview中的内容。
public partial class Generator : Form { public Form myForm; public Generator() { InitializeComponent(); } public Generator(Form frm) { myForm = frm; } private void button1_Click(object sender, EventArgs e) { myForm.mydatagridview.! // this is not working } }
我该如何解决这个问题,所以我可以从Generator
表单中操作DataGridView
。
谢谢。
表格1:
private void button1_Click(object sender, EventArgs e) { Form gen = new Generator(this.mydatagridview); gen.Show(); }
发电机表格:
DataGridView _dataGridView; public Generator(DataGridView dataGridView) { InitializeComponent(); this._dataGridView = dataGridView; } private void button1_Click(object sender, EventArgs e) { this._dataGridView...! // this will work }
你必须做的事情,并且知道(只是提示,你不是被迫做这些,但我相信如果你这样做,你会成为一个更好的程序员!)
始终在所有表单构造函数中调用InitializeComponent()。 在您的示例中,您没有在其中一个构造函数中调用它。
C#只知道您传递的类型的信息。 如果您传递一个表单,那么您只获得表单属性(即表单类型的属性),而不是您自己的表单的属性。
尝试封装东西。 不要将整个表单传递给另一个表单。 相反,传递您想要在另一个表单上使用的内容。
这里发生了一些事情。
- 您必须使用
Generator
的构造函数,该构造函数将表单作为参数。 - 您必须将datagridview公开为将传递给Generator的表单上的公共或内部属性。
- 普通的
Form
类不会知道这个属性,所以你应该适当地转换变量。 - 当使用其他构造函数确保所有内容都已正确初始化时,您应该调用Generator的默认构造函数。 请参阅下面的代码示例
像这样的东西应该工作:
public class Generator { private MyForm myForm; public Generator() { InitializeComponent(); } public Generator(MyForm frm) : this() // DON'T FORGET THIS() { myForm = frm; } private void button1_Click(object sender, EventArgs e) { myForm.MyDataGridView... // Yay, it works! } } public class MyForm : Form { public MyForm() { InitializeComponent(); // a datagridview is created here, say "datagridview1" } public DataGridView MyDataGridView { get { return datagridview1; } } }
然后在你的按钮点击事件(我假设在MyForm
某个地方定义):
private void button1_Click(object sender, EventArgs e) { Form gen = new Generator(this); gen.Show(); }
最简单的方法是在Form1上打开DataGridView(myDataGridView)的设计器,并将Modifiers属性从private
为internal
或public
这将允许您从Generator表单中调用myForm.myDataGridView
。