从另一个表单 C# 调用变量
本文关键字:调用 变量 表单 另一个 | 更新日期: 2023-09-27 17:55:41
我在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
中的数据网格视图中的某些内容。
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# 只知道已传递类型的信息。如果传递 Form,则只会获得 Form 属性(即 Form 类型的属性),而不是您自己的窗体的属性。
尝试封装事物。不要将整个表单传递给另一个表单。相反,传递要在另一个窗体上使用的内容。
这里有一些事情发生。
- 您必须使用以形式形式作为参数的
Generator
的构造函数。 - 您必须在将传递到生成器的窗体上将 datagridview 公开为公共或内部属性。
- 正常的
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
这将允许您从生成器窗体调用myForm.myDataGridView
。