无法将类型为“ NewProject.MainForm”的对象转换为类型为“ NewProject.Form1”

时间:2019-12-02 05:02:27

标签: c# winforms

我正在使用C#WinForms开发文档存档应用程序。

我有MainForm,子Form:Form1,Form2,Form3和用于数据操作的表单;表格4。 在MainForm中,有3个按钮将子窗体显示到面板。 例如,button1将通过使用click事件显示Form1。 将Form1显示到MainForm面板中的代码如下:

 private void bunifuSMasukbtn_Click(object sender, EventArgs e)
    {
        panel1.Controls.Clear();
        Form1 objForm = new Form1();
        objForm.TopLevel = false;
        panel1.Controls.Add(objForm);
        objForm.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
        objForm.Dock = DockStyle.Fill;
        objForm.Show();

    }

,与其他MainForm按钮相同,它将显示Form2和Form3。 子表单由按钮和datagridview组成。在Form1中,有一个按钮,如果单击该按钮将显示Form4,并将datagridview的选定行传递到Form4的文本框中,就像我之前的问题here一样。 @ ymdred16建议的代码是:

public void EditBtn_Click(object sender, EventArgs e)
    {           
        Form4 fr = new Form4();
        int row = DataGridView1.CurrentRow.Index;
        fr.Shown += (senderfr, efr) =>
        {

            if (fr.Owner == null) return;

            var ownerForm = (Form1)fr.Owner; //this is where the error msg appears
            fr.TextBox1.Text = ownerForm.DataGridView1[0, row].Value.ToString();
            fr.TextBox2.Text = ownerForm.DataGridView1[1, row].Value.ToString();

        };

        fr.ShowDialog(this);

    }

当我更改Application.Run(new MainForm());时,以上代码可以完美地工作。在Program.cs上到Application.Run(new Form1());因此应用程序将从Form1开始。但是当应用程序从MainForm启动时,然后单击Form1的按钮,我收到错误消息“无法将类型为'NewProject.MainForm'的对象转换为类型为'NewProject.Form1'。” 我也尝试使用@ ymdred16建议将var ownerForm = (Form1)fr.Owner;更改为如下形式:var ownerForm = (MainForm)fr.Owner.Owner;,但收到错误消息“'MainForm'不包含'DataGridView1'的定义....”,我认为会发生此问题因为我在MainForm中打开Form1。 为了使这个问题更清楚,这是我的应用程序的屏幕截图: MainForm Showing Form1 Form4

0 个答案:

没有答案