[英]call variable from another form 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
?
表格一:
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# 只知道您传递的类型的信息。 如果你传递一个Form,那么你只能得到Form属性(即Form类型的属性),而不是你自己的form的属性。
尝试封装事物。 不要将整个表单传递给另一个表单。 相反,传递您想在其他表单上使用的内容。
这里正在发生一些事情。
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();
}
最简单的方法是在 Form1 上打开 DataGridView (myDataGridView) 的设计器,并将 Modifiers 属性从private
为internal
或public
这将允许您从 Generator 表单调用myForm.myDataGridView
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.