无法在以前的相同表单中插入数据 - 创建新表单时我丢失了数据

Can't insert data in the same previous form - I lose data when I create a new form

我的问题是,当我在 datagridview 中选择一行时,它会打开一个新表单,而不是之前的表单。

这是我的代码:

按钮:“Form1”中的“choix de l'article”:f2 调用 form2

public partial class A_commande : Form
{
    public A_commande()
    {
        InitializeComponent();
    }

    private void button12_Click(object sender, EventArgs e)
    {
        A_fournisseur_article f2 = new A_fournisseur_article();

        f2.Show();
    }
}

Form2: f1 调用form1

private void articleDataGridView_CellMouseDoubleClick(object sender, DataGridViewCellMouseEventArgs e)
{
        if (e.RowIndex >= 0)
        {
            A_commande f1 = new A_commande();
            DataGridViewRow row = this.articleDataGridView.Rows[e.RowIndex];

            f1.articleComboBox.Text = articleDataGridView.CurrentRow.Cells[0].Value.ToString();
            f1.catégorieTextBox.Text = articleDataGridView.CurrentRow.Cells[1].Value.ToString();

            this.Hide();
            f1.Show();
        }
}

Form1

Form2

(My problem): it's not "form1" but I get "new form1"

非常感谢您的宝贵时间。

每次需要访问现有表单时,您都创建一个新表单。

这有点像每次上班都要买一辆新车,而你应该保留钥匙并再次使用同一辆车。

因此您需要更改第二个表单以在创建第一个表单时接受对第一个表单的引用。那你就用这个参考吧。

首先以您的第二种形式执行此操作

public partial class A_fournisseur_article : Form
{
    //You need somewhere to store the reference to your first form
    private A_commande firstForm = null;

    private A_fournisseur_article ()   //Change this to private
    {
        InitializeComponent();
    }

    //create a new public constructor, which acepts the reference
    public A_fournisseur_article (A_commande myFirstForm) :  this()  //make sure it call this() which is the constructor above.
    {
        //Now we store the reference
        this.firstForm = myFirstForm;
    }


    private void articleDataGridView_CellMouseDoubleClick(object sender, DataGridViewCellMouseEventArgs e)
    {
        if (e.RowIndex >= 0)
        {
            //Remove the line below.  We don't want a new one!
            //A_commande f1 = new A_commande();

            DataGridViewRow row = this.articleDataGridView.Rows[e.RowIndex];

            //Now you use your reference from earlier
            firstForm?.articleComboBox.Text = articleDataGridView.CurrentRow.Cells[0].Value.ToString();
            firstForm?.catégorieTextBox.Text = articleDataGridView.CurrentRow.Cells[1].Value.ToString();

            this.Hide();
            f1.Show();
        }
    }
}

现在您需要更改从第一个表单创建和调用第二个表单的方式

public partial class A_commande : Form
{
    public A_commande()
    {
        InitializeComponent();
    }

    private void button12_Click(object sender, EventArgs e)
    {
        //Here, we now pass a reference to this form (A_commande)
        A_fournisseur_article f2 = new A_fournisseur_article(this);

        f2.Show();
    }
}