Я хотел бы централизовать обработчик кода для всех событий FormClosed, есть ли способ автоматически получать уведомления обо всех закрывающихся формах?Есть ли способ захватить все события FormClosed в C# в приложении автоматически?
ответ
подписаться на ваш обработчик событий после создания формы. т.е. использовать + =
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace Craft
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
var f = new Form2();
f.FormClosing += ClosingMonitorer;
f.Show();
var g = new Form3();
g.FormClosing += ClosingMonitorer;
g.Show();
}
void ClosingMonitorer(object sender, FormClosingEventArgs e)
{
MessageBox.Show((sender as Form).Text + " is closing");
}
}
}
[EDIT: или вы можете использовать методы расширения для упрощения процесса подписки события]
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace Craft
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
var f = new Form2();
f.Show(ClosingMonitorer);
var g = new Form3();
g.Show(ClosingMonitorer);
}
void ClosingMonitorer(object sender, FormClosingEventArgs e)
{
MessageBox.Show((sender as Form).Text + " is closing");
}
}
public static class Helper
{
public static void Show(this Form f, FormClosingEventHandler feh)
{
f.FormClosing += feh;
f.Show();
}
}
}
Существует не так просто, как я знаю, но если вы хотите изучить некоторые новые методы, вы можете сделать это с помощью аспектно-ориентированного программирования.
Расширения объект Form не поможет вам с формами, которые не являются частью вашего приложение (например, OpenFileDialog) – tster
Почему это комментарий к собственному ответу, а не мой? Что касается необходимости справиться с этим делом, пусть автор-автор скажет, что это беспокоит его. Если это так, вы начинаете копаться в фильтрах цикла сообщений, которые будут обрабатывать ваш случай. Но это немного перебор, если вам не нужно обрабатывать каждую маленькую форму, такую как общие диалоги и окна сообщений. –
Подкласс Form
и в конструкторе подключить некоторую функцию к событию FormClosed
? Что-то вроде следующего:
public class MyForm : Form
{
public MyForm(FormClosedEventHandler handler) : base()
{
this.FormClosed += handler;
}
}
А затем просто использовать MyForm
вместо Form
в качестве BaseClass для всех ваших форм.
EDIT: Если у вас есть некоторые статические функции где-то, что вы хотите использовать в качестве обработчика для всех FormClosed
событий, то вы можете использование курса:
public MyForm() : base()
{
this.FormClosed += Program.MyFormClosedHandler;
}
Но это немного плохо (трудно проверить, см. инъекцию зависимостей), и вы можете использовать цепочку конструкторов для достижения той же самой цели в любом случае.
Привет, хорошее решение, я не знаю, почему он работает для меня, когда я создаю простой пример, но, похоже, он не работает в моем приложении реального мира, вам придется исследовать причину. – programmernovice
Вы изменили все формы в приложении, чтобы использовать 'MyForm' или то, что вы назвали им instaaed из' Form'? –
- 1. Перезапуск приложения на FormClosed события в C#
- 2. Ручка FormClosed события в WinForms
- 3. Есть ли способ захватить «закрытие» события в iBook widget?
- 4. Есть ли способ захватить события вставки x-браузера в mootools?
- 5. Есть ли способ «захватить» все краны UIButton внутри приложения?
- 6. ExtJS - захватить все события
- 7. Каков наилучший способ захватить все события doubleclick в DataGridView?
- 8. Есть ли способ автоматически группировать (почти) все столбцы в data.table
- 9. Есть ли способ контролировать прикосновение в приложении?
- 10. В response.js есть ли способ отключить все дочерние события
- 11. рельсы - есть ли способ захватить все параметры POST?
- 12. Есть ли способ перечислить все swizzled методы в приложении iOS?
- 13. Есть ли способ увидеть все объявления Admob в моем приложении
- 14. Есть ли способ автоматически захватить все элементы на странице с помощью Selenium?
- 15. Есть ли способ захватить фактическое состояние System.Random?
- 16. Есть ли способ найти объект в приложении?
- 17. Есть ли способ «съесть» события в Node.js?
- 18. Есть ли способ зарегистрировать события навалом?
- 19. Есть ли способ перечислить все препроцессоры C?
- 20. Закрытие активной формы из другого события FormClosed
- 21. Есть ли способ захватить элемент по атрибуту?
- 22. Есть ли способ автоматически перебирать все существующие группы?
- 23. Как получить все события мыши в приложении?
- 24. Есть ли способ увековечить сеанс электронной почты в приложении C#?
- 25. Есть ли способ приостановить все таймеры Threading.Timer?
- 26. Есть ли способ прослушать события в классе pop up manager?
- 27. Есть ли способ инициировать уведомление автоматически для соответствия текущей дате?
- 28. Flex захватить все щелчки мышью на приложении
- 29. Есть ли способ захватить данные из QLineedit в режиме пароля?
- 30. Есть ли способ разделить соединение автоматически?
Здравствуйте, мне нравится ваше предложение, спасибо. – programmernovice