У меня есть следующая функция.
Что он делает, учитывая элемент управления (скорее всего, форму окна), я хочу, чтобы все элементы управления содержали , которые "подчиняются" правилам (функция, проверяющая элементы управления, которые я хочу) подписаться событие (скажем, KeyDown).
Вопрос: как отписаться? Или, что более важно, мне нужно для?
Так как я буду использовать это в событии Load форм в самой форме, мне действительно нужно отписаться, если форма закрывается?
(после небольшого прочтения и небольшого понимания GC я подозреваю, что мне не нужно отписываться, но я не уверен)
//an example of using the function
private void Form1_Load(object sender, EventArgs e)
{
MyEventHandler.CreateKeyDownEventHandlers(this);
}
//the function
public static void CreateEventHandlers(Control Ctrl)
{
foreach (Control c in Ctrl.Controls)
{
//bool Rules(Control) a function that determines to what controls'
//events to apply the handler
if ( Rules(c) )
{
c.KeyDown += (s, e) =>
{
// do something
};
}
//a control might be a groupbox so we want their contained
//controls also
if (c.Controls != null)
{
if (c.Controls.Count > 0)
{
CreateEventHandlers(c);
}
}
}
}
Это моя первая попытка с событиями, делегатами, анонимными функциями и лямбдами, так что, если я сделал что-то действительно глупое, скажите мне.