0

我正在尝试使用多种表单,我想要的是改变表单的方式取决于组合框的选定索引,我能想到的唯一方法是隐藏 form1 并显示 form2,但问题是当你关闭form2,过程没有结束...我尝试了下面的代码

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

如果没有,有没有办法可以在组合框选定的索引上更改表单?

4

4 回答 4

1

尝试Application.Exit();

它退出您的整个应用程序并关闭您的所有表单和线程。

于 2015-07-05T09:50:39.943 回答
1

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

public class Form2 : Form{
    private Form _form1;

    public Form2(Form form1):this()
    {
        _form1 = form1;
        InitializeComponent();
    }
}

稍后您可以简单地使用该参考:

_form1.Close();

这是一种更清洁的方法。其他机制也可以,例如在 form1 上为 form2 中的事件实现事件处理程序。

根据您的 pastebin 代码更改此:

Form2 HeadquarterForm = new Form2(this);

您还只需要关闭的事件处理程序并在 _form1 上调用 close 一次。所以你真的不需要关闭事件处理程序。

于 2015-07-05T09:55:17.193 回答
0

该进程仍在运行,因为 form1 仍然存在但已隐藏。

尝试使用 Environmental.exit() 杀死进程

于 2015-07-05T09:47:47.470 回答
0

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

Form2 HeadquarterForm = new Form2(this);
于 2015-07-05T11:23:58.027 回答