如何关闭表单

本文关键字:表单 何关闭 | 更新日期: 2023-09-27 17:53:51

好的,所以Windows窗体类、WindowSettings和窗体都有一个"取消"按钮。当用户单击该按钮时,对话框DialogSettingsCancel将弹出,并询问用户是否确定要执行该操作。对话框有两个按钮,一个"是"按钮和一个"否"按钮。如果用户单击"是"按钮,我希望对话框设置取消和窗口设置都关闭。

我的按钮单击对话框设置中的事件处理程序取消:

private void button1_Click(object sender, EventArgs e)
{
    //Code to trigger when the "Yes"-button is pressed.
    WindowSettings settings = new WindowSettings();
    this.Close();
    settings.Close();
}

当我运行我的应用程序,转到设置窗体,单击"取消"按钮,然后单击"是"按钮时,只有对话框设置取消关闭而不关闭WindowSettings。

为什么它不起作用?

我也试过改变

this.Close();
settings.Close();

settings.Close();
this.Close();

但结果还是一样。

如何关闭表单

您需要打开的WindowSettings的实际实例,而不是新实例。

目前,您正在创建一个WindowSettings的新实例,并在此实例上调用Close。这没有任何作用,因为从未显示过那个新实例。

相反,当显示DialogSettingsCancel时,将WindowSettings的当前实例设置为父实例。

类似这样的东西:

WindowSettings:中

private void showDialogSettings_Click(object sender, EventArgs e)
{
    var dialogSettingsCancel = new DialogSettingsCancel();
    dialogSettingsCancel.OwningWindowSettings = this;
    dialogSettingsCancel.Show();
}

DialogSettingsCancel:中

public WindowSettings OwningWindowSettings { get; set; }
private void button1_Click(object sender, EventArgs e)
{
    this.Close();
    if(OwningWindowSettings != null)
        OwningWindowSettings.Close();
}

这种方法考虑到DialogSettingsCancel可能在没有WindowsSettings作为父级的情况下打开。

如果两者总是连接的,那么应该使用构造函数参数:

WindowSettings:中

private void showDialogSettings_Click(object sender, EventArgs e)
{
    var dialogSettingsCancel = new DialogSettingsCancel(this);
    dialogSettingsCancel.Show();
}

DialogSettingsCancel:中

WindowSettings _owningWindowSettings;
public DialogSettingsCancel(WindowSettings owningWindowSettings)
{
    if(owningWindowSettings == null)
        throw new ArgumentNullException("owningWindowSettings");
    _owningWindowSettings = owningWindowSettings;
}
private void button1_Click(object sender, EventArgs e)
{
    this.Close();
    _owningWindowSettings.Close();
}

您也可以关闭应用程序:

Application.Exit();

它将结束这些过程。

new WindowSettings();

您刚刚关闭了表单的一个全新实例,该实例一开始并不可见。

您需要通过接受表单的原始实例作为构造函数参数并将其存储在字段中来关闭该实例。

为什么不使用DialogResult方法关闭表单?

if(DialogSettingsCancel.ShowDialog() == DialogResult.Yes)
{
     //this will close the form but will keep application open if your 
     //application type is "console" in the properties of the project
     this.Close();
}

然而,要想做到这一点,你需要在"WindowSettings"窗体中调用DialogSettingsCancel窗体。就像调用OpenFileDialog或任何其他对话框窗体一样。

您在创建设置窗口后立即关闭它的实例。您需要先显示设置窗口,然后等待对话框结果。如果返回为已取消,则关闭窗口。例如:

private void button1_Click(object sender, EventArgs e)
{
    Settings newSettingsWindow = new Settings();
    if (newSettingsWindow.ShowDialog() == DialogResult.Cancel)
    {
        newSettingsWindow.Close();
    }
}

打开或关闭winform有不同的方法。Form.Close((是关闭winform的一种方法。

何时形成。Close(('执行时,以该形式创建的所有资源都将被销毁。资源是指控件及其所有子控件(标签、按钮(、表单等。

关闭winform 的其他一些方法

  1. 形式。隐藏((
  2. 应用程序。退出((

打开/启动表单的一些方法

  1. 形式。显示((
  2. 形式。显示对话框((
  3. 形式。TopMost((

所有人的行为都不一样,探索他们!

发送WindowSettings作为DialogSettingsCancel的构造函数的参数,然后在按钮1_Click上,当按下yes时调用它们的close方法。

public class DialogSettingsCancel
{
    WindowSettings parent;
    public DialogSettingsCancel(WindowSettings settings)
    {
        this.parent = settings;        
    }
    private void button1_Click(object sender, EventArgs e)
    {
        //Code to trigger when the "Yes"-button is pressed.
        this.parent.Close();
        this.Close();
    }
}

例如,如果您想在执行操作时关闭windows窗体,有两种方法可以实现

1.直接关闭

Form1 f=new Form1();
f.close(); //u can use below comment also
//this.close();

2.我们也可以在不关闭的情况下隐藏表单

 private void button1_Click(object sender, EventArgs e)
    {
        Form1 f1 = new Form1();
        Form2 f2 = new Form2();
        int flag = 0;
        string u, p;
        u = textBox1.Text;
        p = textBox2.Text;
        if(u=="username" && p=="pasword")
        {
            flag = 1;
        }
        else
        {
          MessageBox.Show("enter correct details");
        }
        if(flag==1)
        {
            f2.Show();
            this.Hide();
        }
    }