0

我是 C# 的业余爱好者,我不明白这里发生了什么。这不是一个真正的问题,因为我可以为它做一个快速修复,但我仍然想知道为什么

免责声明:我知道这可能不是设计这个程序的最佳方式,但我得到了非常短的时间来开发它,我只是想在截止日期前发布它。

我的程序中有一个主窗体。当按下 2 个按钮中的 1 个时,此表单会调用第二个表单。这些按钮使用相同的功能打开第二种形式:

private void setupShow(int show)
    {
        fSetup setup = new fSetup(show);
        setup.Show();
        setup.FormClosed += new FormClosedEventHandler(setup_FormClosed);
    }

当 button1 调用该函数时,它会隐藏主窗体并打开下一个窗体。但是,当第二个按钮调用该函数时,它会保持主窗体打开,但仍会打开第二个窗体。

那么可能是什么原因造成的呢?

Button1 比 button2 有更多的代码,如果需要这些功能,我可以在这里发布它们,但它会填满大部分屏幕。

编辑:

int show; 

只是我用于以第二种形式执行的函数的变量。就窗户关闭而言,它与任何事情都没有关系。

按钮 1:仅调用此功能。该函数插入数据库,然后获取该行的插入 ID 并将其传递给第二种形式

private void CheckFields()
    {
        OleDbCommand insertParty;
        OleDbDataAdapter partyAdapt = new OleDbDataAdapter();
        int nameL = PName.Text.Length;
        int newPartyID = 0;

        if (nameL > 0)
        {
            String test = "INSERT INTO Parties (PartyName, BackgroundImg) VALUES (?, ?)";

            insertParty = new OleDbCommand(test, Parties);
            insertParty.Parameters.AddWithValue("PartyName", PName.Text);
            insertParty.Parameters.AddWithValue("BackgroundImg", tBrowse.Text);


            Parties.Open();
            insertParty.ExecuteNonQuery();

            NewPartyForm.ActiveForm.Visible = false;


            OleDbCommand selectnewParty;
            OleDbDataAdapter newpartyAdaptr = new OleDbDataAdapter();
            String selectNew = "SELECT TOP 1 PartyID, PartyName FROM Parties ORDER BY PartyID DESC";
            selectnewParty = new OleDbCommand(selectNew, Parties);
            OleDbDataReader newReader = selectnewParty.ExecuteReader();

            while (newReader.Read())
            {
                newPartyID = newReader.GetInt32(0);
            }

            setupShow(newPartyID);
        }
        else
            MessageBox.Show("Please Create a Party Name");
    }

按钮 2:从组合框中的字符串中截取整数并将其传递给第二种形式

private void bLoad_Click(object sender, EventArgs e)
    {
        Object selectedParty = cLoadP.SelectedItem;
        String sP = selectedParty.ToString();
        String d1 = " - ";
        char[] delim = d1.ToCharArray();
        String[]  numS = sP.Split(delim);

        setupShow(Convert.ToInt32(numS[0]));
    }

就像我说的,这个代码是由一个业余爱好者开发的,而且速度非常快。这不是我通常做事的方式,但我没有太多时间去真正思考。哈哈

第二种形式的初始函数:

public fSetup(int partyID)
    {
        InitializeComponent();
        pID = partyID;
        lpID.Text += " " + pID.ToString();
    }
4

1 回答 1

4

我怀疑不同行为的原因是按钮 1 的代码中的这一行:

NewPartyForm.ActiveForm.Visible = false; 

按钮 2 的代码中没有类似的行。

于 2012-04-18T23:53:01.670 回答