C#在Form2 close上结束流程
我正在尝试使用多个表单,我想要的是根据组合框的选定索引更改表单的方式,我唯一能想到的方法是隐藏表单1并显示表单2,但问题是当您关闭表单2时,该过程不会结束…我尝试了下面的代码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"))
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);