为什么同样的功能可以做两件不同的事情?

时间:2012-04-18 23:24:48

标签: c# .net winforms .net-3.5

我是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 个答案:

答案 0 :(得分:4)

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

NewPartyForm.ActiveForm.Visible = false; 

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