私には次の機能があります。
コントロール(おそらくWindowsフォーム)が与えられた場合、ルール(必要なコントロールをスクリーニングする関数)に「従う」すべてのコントロールをイベント(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);
}
}
}
}
これは、イベント、デリゲート、無名関数、ラムダを使った最初の試みなので、本当に愚かなことをした場合は教えてください。