Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#在Form2 close上结束流程_C#_Multiple Forms - Fatal编程技术网

C#在Form2 close上结束流程

C#在Form2 close上结束流程,c#,multiple-forms,C#,Multiple Forms,我正在尝试使用多个表单,我想要的是根据组合框的选定索引更改表单的方式,我唯一能想到的方法是隐藏表单1并显示表单2,但问题是当您关闭表单2时,该过程不会结束…我尝试了下面的代码 private void Form2_FormClosing(object sender, FormClosedEventArgs e) { foreach (var process in Process.GetProcessesByName("Process Name.exe"))

我正在尝试使用多个表单,我想要的是根据组合框的选定索引更改表单的方式,我唯一能想到的方法是隐藏表单1并显示表单2,但问题是当您关闭表单2时,该过程不会结束…我尝试了下面的代码

private void Form2_FormClosing(object sender, FormClosedEventArgs e)
    {
        foreach (var process in Process.GetProcessesByName("Process Name.exe"))
        {
            process.Kill();
        }
    }

如果没有,表单是否可以在combobox选定的索引上更改?

该进程仍在运行,因为表单1仍然处于活动状态,但处于隐藏状态

尝试使用environment.exit()终止进程

Try
Application.exit()


它退出整个应用程序并关闭所有窗体和线程。

只需将Form1的实例传递给Form2的构造函数,并在Form1成员中保留对它的引用

public class Form2 : Form{
    private Form _form1;

    public Form2(Form form1):this()
    {
        _form1 = form1;
        InitializeComponent();
    }
}
稍后,您可以简单地使用该引用:

_form1.Close();
这是一种更干净的方法。 其他机制也可以,比如在form1上为form2中的事件实现eventhandler

根据您的pastebin代码更改此:

Form2 HeadquarterForm = new Form2(this);

您还只需要closed eventhandler,只需对_form1调用close一次。因此,您实际上不需要关闭事件处理程序。

查看pastebin中的代码。问题是,在创建Form2时,并没有在Form2的构造函数中传递Form1。将开关盒(4)的部分更改为:


它是
Environment.Exit()
我刚刚用
Form2\u FormClosed
Form2\u FormClosed
试过了,但仍然不起作用:/如果你没有显示任何代码,我就无法找出你做错了什么。好吧……在Combobobox1上,当索引更改为特定的索引时,它会
Form2 HeadquarterForm=new Form2();                         总部表单Show();this.Hide()所以它隐藏了这是Form1,显示了Form2,我在Form2中添加了你的代码,我尝试了
\u Form1.Close()
Form2\u FormClosing
Form2\u FormClosing
中,但它不起作用:/在我的回答中添加了一些代码,基于您的粘贴库(System.Windows.Forms.Form)由于其保护级别而无法访问,那么问题出在代码的其他地方。请发布你的全部代码。好吧,我想你只需要这个,因为其他代码与此无关,谢谢。我检查了你的代码,它似乎是正确的。在Application.Exit()行上添加一个断点,并检查它是否到达该行。谢谢,但Philip提到了这一点,并且在我在括号(System.Windows.Forms.Form)之间添加了
this
之后,它给了我这个错误由于其保护,无法访问level@user3542613尝试将您的Form1和Form2声明为公共类Form1和公共类Form2。我通过将
public Form2(){InitializeComponent();}
更改为
protected Form2(){InitializeComponent()}
但是现在它给了我这个错误'MW3_Config_Creator.Form2'没有包含一个在你的回答行中接受1个参数的构造函数这很奇怪,如果你还有:Form2(Form form1):this(){form1=form1;}就像在你的粘贴箱中一样。我的水晶球告诉你,当你在输出窗口中查看时,你会看到“第一次机会异常”通知。由Kill()失败引起。中解释了为什么在调试器不说话的情况下忽略此异常。
Form2 HeadquarterForm = new Form2(this);