我正在使用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。
为了使这个问题更清楚,这是我的应用程序的屏幕截图: