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

标签 c# winforms

我在 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

最佳答案

表格 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# 只知道您传递的类型的信息。如果你传递一个表单,那么你只会得到表单属性(即类型表单的属性),而不是你自己的表单的属性。

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

关于c# - 从另一种形式调用变量 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5928071/

相关文章:

c# - 多线程格式化datagridview行?

C#ArgumentOutOfRangeException异常

c# - SQL查询基于空日期条件和另一个字段的特定值

c# - 打印发票、取票等的最佳方式

c# - GroupBox 中是否有任何属性指示已检查嵌套控件?

C# 程序关闭

c# - 如何使用 C# 在 Button Hover 上创建动画发光效果?

c# - 使用 Roslyn,如何检查类是否来自本地项目,而不是 BCL 或 Nuget(等)?

c# - 将 "de"添加到 es-ES CultureInfo DateTime C#

c# - 主 WPF 窗口的句柄 IntPtr 为零