我有一个包含两个表单的程序第一种形式是主形式,也是程序将从它开始的形式第二种形式是只显示一次值,然后返回到第一种形式,第二种将关闭的形式注意:在开始时,程序将从两个中选择一个
- 如果程序中没有值,则显示第二种形式,然后关闭第二种并转到第一种
- 如果程序具有值,则在其上显示第一个和县
注意:当第二个表单出现时,第一个表单将被隐藏,然后程序从用户那里获取值后,第二个窗体将关闭,第一个窗体将显示
换句话说,如果用户向程序提供第二种形式之前的值,则不会出现,只有第一种形式才会出现
问题是当第一个表单在第二个表单取值后打开时,第二个窗体仍然打开
代码形式1
private void Form1_Load(object sender, EventArgs e)
{
b();
}
private void b()
{
Open();
String SqlQuery = "SELECT * from test1";
DataTable dt = new DataTable();
dt = fetchData(SqlQuery);
if (!(dt.Rows.Count >0))
{
MessageBox.Show("incorect user");
fm2 = new Form2();
fm2.Show();
this.Hide();
}
}
代码形式2
public void fn()
{
String SqlQuery = "SELECT * from test1 ";
DataTable dt = new DataTable();
dt = fetchData(SqlQuery);
if (dt.Rows.Count > 0)
{
Application.OpenForms[0].Show();
MessageBox.Show("DONE");
this.Close();
}
}
private void button1_Click(object sender, EventArgs e)
{
string insertQuery = "INSERT INTO test1( name, phone) VALUES" +
"('" + (textBox1.Text) + "','" + (textBox2.Text) + "')";
ExcuteQuery(insertQuery);
fn();
}
我有一个问题,那就是我让它隐藏在代码后面的后台运行的形式Application.OpenForms[0].Show();
如果没有真正查看应用程序的详细信息。但是,如果您不想在Form2
关闭之前打开Form1
,您应该更改:
fm2.Show();
至
fm2.ShowDialog();
if (!(dt.Rows.Count > 1))
更改为
if (!(dt.Rows.Count >0))
您可以尝试隐藏主窗体,然后将第二个窗体显示为对话框(这意味着代码流将转到第二个表单,直到它关闭,然后从它停止的地方恢复(。你甚至可以在一个循环中完成,以防他们在没有输入用户的情况下关闭第二个表单:
Form1
string SqlQuery = "SELECT * from test1 ";
DataTable dt = fetchData(SqlQuery);
while (dt.Rows.Count == 0)
{
this.Hide();
MessageBox.Show("No users exist. Please add one.");
using (Form2 fm2 = new Form2())
{
fm2.ShowDialog(this);
}
dt = fetchData(SqlQuery);
}
this.Show();
然后在第二个表单中,您不必担心试图显示第一个表单,因为当代码恢复时,第一个表单会显示出来。
Form2
if (dt.Rows.Count > 0)
{
MessageBox.Show("User added successfully.");
this.Close();
}
else
{
MessageBox.Show("No user was added. Please try again.");
}
如果您仍然有问题,那么fetchData
或ExecuteQuery
似乎无法正常工作。您应该验证用户是否在ExecuteQuery
之后实际添加到SQL中。
此外,您还可以在代码中添加断点,并在调试器中检查dt.Rows
的Count
属性,以确保fetchData
正常工作。