如何只打开一次第二张表格



我有一个包含两个表单的程序第一种形式是主形式,也是程序将从它开始的形式第二种形式是只显示一次值,然后返回到第一种形式,第二种将关闭的形式注意:在开始时,程序将从两个中选择一个

  1. 如果程序中没有值,则显示第二种形式,然后关闭第二种并转到第一种
  2. 如果程序具有值,则在其上显示第一个和县

注意:当第二个表单出现时,第一个表单将被隐藏,然后程序从用户那里获取值后,第二个窗体将关闭,第一个窗体将显示

换句话说,如果用户向程序提供第二种形式之前的值,则不会出现,只有第一种形式才会出现

问题是当第一个表单在第二个表单取值后打开时,第二个窗体仍然打开

代码形式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.");
}

如果您仍然有问题,那么fetchDataExecuteQuery似乎无法正常工作。您应该验证用户是否在ExecuteQuery之后实际添加到SQL中。

此外,您还可以在代码中添加断点,并在调试器中检查dt.RowsCount属性,以确保fetchData正常工作。

最新更新