私は C# のアマチュアで、ここで何が起こっているのかわかりません。クイックフィックスを作成できるので、実際には問題ではありませんが、それでもWhyを知りたいです。
免責事項: これがおそらくこのプログラムを設計する最良の方法ではないことはわかっていますが、開発に非常に短い時間が与えられているため、締め切りまでに出荷しようとしています。
プログラムにメインフォームがあります。このフォームは、2 つのボタンのうちの 1 つが押されると、2 番目のフォームを呼び出します。これらのボタンは、同じ機能を使用して 2 番目のフォームを開きます。
private void setupShow(int show)
{
fSetup setup = new fSetup(show);
setup.Show();
setup.FormClosed += new FormClosedEventHandler(setup_FormClosed);
}
button1 がその関数を呼び出すと、メイン フォームが非表示になり、次のフォームが開きます。ただし、2 番目のボタンがその関数を呼び出すと、メイン フォームは開いたままになりますが、2 番目のフォームは引き続き開きます。
では、何が原因でしょうか?
ボタン 1 にはボタン 2 よりもかなり多くのコードがあり、機能が必要な場合はここに投稿できますが、画面の大部分がいっぱいになります。
編集:
int show;
2 番目の形式で実行される関数に使用する単なる変数です。窓が閉まる限り、それは何の関係もありません。
ボタン 1: この関数のみを呼び出します。関数はデータベースに挿入し、その行の挿入 ID を取得して 2 番目のフォームに渡します。
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: コンボボックス内の文字列から整数を切り取り、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]));
}
私が言ったように、このコードはアマチュアによって非常に迅速に開発されています。これは私が通常行う方法ではありませんが、本当に考える時間はあまりありません。笑
2 番目の形式の初期関数:
public fSetup(int partyID)
{
InitializeComponent();
pID = partyID;
lpID.Text += " " + pID.ToString();
}