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