为什么同一个函数做两件不同的事情

本文关键字:两件 不同的事 同一个 函数 为什么 | 更新日期: 2023-09-27 18:31:30

我是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();
    }

为什么同一个函数做两件不同的事情

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

NewPartyForm.ActiveForm.Visible = false; 

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