Form1关闭并重新显示Form1后,Form1将不会保持打开状态

时间:2019-02-06 08:00:59

标签: c# .net winforms

在我的form1中,我打开form2并将form2的结果写入变量DialogResult。关闭form2后,依靠form2的结果(DialogResult),我想重新显示我的表单1。

form1显示一秒钟,然后关闭。

该变量已在form1中正确读取(已通过消息框选中),但是在“ Show()”之后,该表单再次关闭。 在调用“ Close()”之前,表单不应该一直显示吗?

启动代码:

using BonnenPrinten;
using Ridder.Common.Script;
using System.Diagnostics;
using System.Windows.Forms;

public class RidderScript : CommandScript
{
    public void Execute()
    {
        int nestingNaam = 0;
        Process[] processes = Process.GetProcesses();
        foreach (var item in processes)
        {
            string itemnaam = item.MainWindowTitle.ToString();
            if (itemnaam.Contains("PN4000"))
                int.TryParse(itemnaam.Substring(3, 5), out nestingNaam);      
        }

        var form1 = new Form1(this, nestingNaam);
        form1.ShowDialog();
    }
}

form1中的代码:

private void BtnStarten_Click(object sender, EventArgs e)
    {
        if (checkbox1.Checked)
            DeleteTijdelijkeBonnen();

        Hide();

        string sqlQuery = SetSqlQuery();
        if (checkbox2.Checked)
            sqlQuery = SetSqlQuery(txtboxNestingnaam.Text);               

        Form form2= new Form2(_script, sqlQuery, bonTekeningCombineren.Checked);
        form2.ShowDialog();

        if (form2.DialogResult == DialogResult.OK) //form2 is closed, form1  should be closed
        {
            Close();
            MessageBox.Show("Bonnenverwerking succesvol afgerond!", "Gereed", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }

        else //form2 is closed, form1 should be shown;
        {
            Show();
        }
    }

退出form2的代码:

DialogResult = DialogResult.OK;
Close();

当DialogResult = 确定时,应关闭该表单。

当DialogResult = 取消时,应打开该表单。

2 个答案:

答案 0 :(得分:1)

问题出在Form1的DialogResult中。在打开和关闭Form2后,Form1.DialogResult也被设置为DialogResult.Cancel。

搜索后,按下buttonStarten,就设置了DialogResult。甚至都不知道这是一个选项。这已删除并解决了问题。

所以:

  • Form1隐藏
  • Form2节目
  • Form2 close
  • Form1节目
  • Form1.Dialogresult =取消,所以:关闭。

解决方案:删除Button.DialogResult

感谢您的帮助。

答案 1 :(得分:0)

您需要这样更改代码:

        if (form2.DialogResult == DialogResult.OK)
            MessageBox.Show("Bonnenverwerking succesvol afgerond!", "Gereed", MessageBoxButtons.OK, MessageBoxIcon.Information);

        Show();

elseShow()时,您的form2.DialogResult阻止了DialogResult.OK的调用。