我在DataGridView
中有一个Form1
我正在使用此代码显示另一个名为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
}
}
如何解决此问题,以便我可以从DataGridView
表单操作Generator
。
感谢。
答案 0 :(得分:4)
表格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#只知道您传递的类型的信息。如果您传递一个表单,那么您只获得表单属性(即表单类型的属性),而不是您自己表单的属性。
尝试封装内容。不要将整个表单传递给另一个表单。相反,传递您想要在另一个表单上使用的内容。
答案 1 :(得分:0)
这里发生了一些事情。
Generator
的构造函数作为参数。 Form
类不会知道此属性,因此您应该适当地转换变量。这样的事情应该有效:
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();
}
答案 2 :(得分:0)
最简单的方法是在Form1上打开DataGridView(myDataGridView)的设计器,并将Modifiers属性从private
设置为internal
或public
这样您就可以从生成器表单中调用myForm.myDataGridView
。