从另一个表单 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

从另一个表单 C# 调用变量

形式 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 类型的属性),而不是您自己的窗体的属性。

尝试封装事物。不要将整个表单传递给另一个表单。相反,传递要在另一个窗体上使用的内容。

这里有一些事情发生。

  1. 您必须使用以形式形式作为参数的Generator的构造函数。
  2. 您必须在将传递到生成器的窗体上将 datagridview 公开为公共或内部属性。
  3. 正常的 Form 类不会知道此属性,因此您应该适当地强制转换变量。
  4. 当使用另一个构造函数来确保所有内容都正确初始化时,您应该调用 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 设置为 internalpublic

这将允许您从生成器窗体调用myForm.myDataGridView