Windows窗体应用程序顺序ShowDialog()s

时间:2017-12-25 07:28:55

标签: c# forms winforms visual-studio showdialog

我关闭对话框表单时遇到了一个有趣的问题。 这是问题:

我运行应用程序并打开第二个表单(通过菜单条)作为showdialog();,然后从第二个表单打开第三个表单。当我通过button 1打开第三个表单然后关闭它一切都没问题,但是当我通过button 2打开第三个表单然后关闭它时,第三个表单将被关闭,然后它关闭第二个表单也。 !在第二种形式,当我显示messageBox并关闭它时,第二种形式也将被关闭。

这是我的代码:

从第一个表单代码中打开第二个表单:

private void settingsToolMenu_Click(object sender, EventArgs e)
    {
        settingsForm s1 = new settingsForm(this);
        s1.ShowDialog();
    }

从第二个button 1表单代码打开第三个表单:

private void addReportButton_Click(object sender, EventArgs e)
    {
        addReport a1 = new addReport(this);
        a1.ShowDialog();
    }

从第二个button 2表单代码打开第三个表单:

private void editReportButton_Click(object sender, EventArgs e)
    {
        addReport a2 = new addReport(this);
        a2.ShowDialog();
    }

如您所见,button 1button 2

之间没有差异

here是来自应用程序运行的视频。

4 个答案:

答案 0 :(得分:0)

不确定那里发生了什么,但应该有.Show()方法,它以不同的方式运行窗口,包括关闭策略。尝试一下。

答案 1 :(得分:0)

试试这个

而不是

addReport a2 = new addReport(this);
a2.ShowDialog();

使用

addReport a2 = new addReport();
a2.ShowDialog(this);

然后单击对话框窗口的退出/关闭按钮

private void BtnExit_Click(object sender, EventArgs e)
    {
        this.Dispose();
    }

希望这能解决您的问题。

答案 2 :(得分:0)

我使用了这段代码并且有效。我有3个表单,第一个表单在运行应用程序时打开,第二个表单用按钮打开(可以是menustrip,不重要),然后第三个表单也是这样打开的,在关闭第三个表单后第二种形式仍然开放。

FormN fm = new FormN();
fm.ShowDialog();

在点击按钮调用的每个方法中使用该段代码,它应该可以正常工作。只需更改" FormN"无论你的表格是什么名字。此外,如果您需要将任何表单的属性传递到下一个表单,您可以执行此操作:

第一种形式的代码:

    public string mytext; //Variable I want to use later, in Form2.
    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        mytext = tb1.Text;
        Form2 fm = new Form2(this);
        fm.ShowDialog();
    }

注意我在调用" fm.ShowDialog();"之前如何在变量中保存" tb1"#(文本框1)的值,所以我可以使用TextBox1稍后在Form2中的值。

第二种形式的代码,具有主要形式的变量(例如" mytext"值)。

    Form1 mfm;
    public Form2(Form1 mainfm)
    {
        InitializeComponent();
        mfm = mainfm;
    }
    public void button2_Click(object sender, EventArgs e)
    {
        //In this method I use the variable "mytext" wich is a Form1 attribute.
        //You can see how I declare it in the first form's code (see above).
        textBox1.Text = mfm.mytext;
    }

这样你就可以在调用第二个表单之前创建一个主表单对象(" Form1 mfm;")及其包含的所有变量,也可以用于第三个表单。 / p>

答案 3 :(得分:0)

以第二种形式formClosing()事件编写了这些代码:

private void settingsForm_FormClosing(object sender, FormClosingEventArgs e)
{
    if(e.CloseReason != CloseReason.UserClosing)
    {
        e.Cancel = true;
    }
}

除了用户之外什么都不能关闭第二种形式!