我有以下代码检查表单的瞬间是否打开。但是,如果表单已经打开,我无法访问控件(DataGridView dgvPDF):
Form frmPDF = Application.OpenForms["frmPDFs"];
if (frmPDF != null)
{
frmPDF.Focus();
frmPDF.dgvPDF.DataSource = PDF.CheckPDFs(Files, frmPDF.tblPDFs); <--- red squiggly lines
}
else
{
frmPDFs frmPDF1 = new frmPDFs();
frmPDF1.Show();
frmPDF1.dgvPDF.DataSource = PDF.CheckPDFs(Files, frmPDF1.tblPDFs);
}
错误消息是:
错误1'System.Windows.Forms.Form'不包含的定义 'dgvPDF'并没有接受第一个参数的扩展方法'dgvPDF' 可以找到'System.Windows.Forms.Form'类型(你错过了吗? 使用指令或程序集引用?)
答案 0 :(得分:0)
这是一个强类型变量:
Form frmPDF = Application.OpenForms["frmPDFs"];
所以frmPDF
现在是Form
类型的实例,它是表单的基类。它的不是您实际表单的类型。 (它是您特定表单类型的实例,但在这种情况下,编译器将该实例称为其基本类型。)
您的实际形式是什么类型?我们暂时假设Form1
。然后将其输入:
Form1 frmPDF = (Form1)Application.OpenForms["frmPDFs"];
然后,您可以访问Form1
上的frmPDF
类型的公开成员。
修改:根据您在下面的评论,类型为frmPDFs
。所以使用:
frmPDFs frmPDF = (frmPDFs)Application.OpenForms["frmPDFs"];
编辑:顺便说一下,施法可能很危险。您可以包含一些类型检查并更优雅地处理错误:
frmPDFs frmPDF = Application.OpenForms["frmPDFs"] as frmPDFs
if (frmPDF == null)
{
// the form was the wrong type, something isn't right
}