繁体   English   中英

从另一种形式 C# 调用变量

[英]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的属性。

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

这里正在发生一些事情。

  1. 您必须使用以表单作为参数的Generator构造函数。
  2. 您必须将 datagridview 公开为您将传递到 Generator 的表单上的公共或内部属性。
  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 属性从privateinternalpublic

这将允许您从 Generator 表单调用myForm.myDataGridView

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM