0

我有一个主窗体(Form1)和一个辅助窗体(AddProd)。在 Form1 上,我有一个打开 AddProd 的按钮。这是事件代码。

private void button69_Click(object sender, EventArgs e)
    {
        pIdVal = Convert.ToInt32(dataGridView2.SelectedRows[0].Cells[0].Value);
        editAdd = true;
        addProd.Show();
    }

“pIdVal”是一个 int,表示要显示的所选记录的 ID。“editAdd”是一个布尔值,它将告诉 AddProd 用户是否希望编辑选定的信息或添加新信息。

我遇到的问题是,当用户在编辑、添加或取消后关闭 AddProd 时,如果我使用 this.Close(),表单就会被释放。除非我重新启动整个程序,否则不允许再次打开 AddProd。如果我尝试重新打开它,我会收到一条错误消息,上面写着“无法访问已处置的对象。对象名称:'AddProd'。” 我也尝试使用 this.Hide() 代替 this.Close()。它使我无法得到已处理的错误。但是,如果我选择一条新记录,然后再次打开 AddProd,则先前选择的记录中的数据仍在文本框中。

为了帮助更好地理解我的问题。Form1 显示产品的 dataGridView 供用户查看。然后用户可以选择一行数据进行编辑,或者用户可以添加新的数据行。一旦用户选择了一行,他们就会按下 Edd/View(button69) 按钮。这将打开 AddProd,其中包含填充了所选行数据的文本框。一旦用户编辑或查看数据并关闭 AddProd,他们选择了不同的行并再次按下 Edd/View 按钮。只有这一次,显示的数据是先前选择的行的数据,而不是当前选择的行。当然,除非我使用 this.Close()。在这种情况下 AddProd 不会重新打开,它只是错误。

对不起,如果我有点重复。我只是想确保这个问题没有问题。有什么帮助吗?

4

1 回答 1

0

只需创建一个 AddProd 的新实例:

private void button69_Click(object sender, EventArgs e)
{
    pIdVal = Convert.ToInt32(dataGridView2.SelectedRows[0].Cells[0].Value);
    editAdd = true;
    AddProd addProd = new AddProd();
    addProd.Show();
}
于 2012-08-14T20:26:36.830 回答