C# Завершающий процесс в Form2 close
Я пытаюсь работать с несколькими формами, мне нужно изменить способ, которым форма зависит от выбранного индекса в выпадающем списке, единственный способ, о котором я мог подумать, это скрыть form1 и показать form2, но проблема в том, когда вы закрываете form2, процесс не заканчивается... Я попробовал код ниже
private void Form2_FormClosing(object sender, FormClosedEventArgs e)
{
foreach (var process in Process.GetProcessesByName("Process Name.exe"))
{
process.Kill();
}
}
если нет, то есть ли способ изменить форму в выбранном индексе списка?
4 ответа
Просто передайте экземпляр Form1 конструктору Form2, сохраните ссылку на него в элементе form1
public class Form2 : Form{
private Form _form1;
public Form2(Form form1):this()
{
_form1 = form1;
InitializeComponent();
}
}
позже вы можете просто использовать эту ссылку:
_form1.Close();
Это более чистый способ сделать это. Другие механизмы также хороши, как, например, реализация обработчика событий в form1 для события в form2.
в зависимости от вашего кода вставки измените это:
Form2 HeadquarterForm = new Form2(this);
вам также нужен только закрытый обработчик событий и вызовите close для _form1 только один раз. Так что вам не нужен обработчик события закрытия.
Пытаться Application.Exit();
Он выходит из всего приложения и закрывает все ваши формы и потоки.
Процесс все еще выполняется, потому что form1 все еще жив, но скрыт.
Попробуйте использовать Environmental.exit(), чтобы убить процесс
Глядя на ваш код в pastebin. Проблема в том, что вы не передаете Form1 в конструктор вашей Form2 при ее создании. Измените часть вашего распределительного шкафа (4) на:
Form2 HeadquarterForm = new Form2(this);