我在和“创建窗口句柄时出错”这一古老的乐趣作斗争。我的应用程序有一个中心区域,它托管用户当前正在处理的任何控件。当用户加载新控件时,我会销毁旧控件。或者至少我试过了。当我运行任务管理器时,我惊恐地看到,随着加载新控件,GDI对象的数量并没有减少。这就是我要做的(试着)杀死一个控制棒。计数器最后显示了一个巨大的数字,这似乎是对的,但是任务管理器中的GDI对象保持不变,直到它达到10000,然后一切都崩溃了。
private void RecursivelyKillYourself(Control C) {
if (C.Controls != null && C.Controls.Count > 0) {
List<Control> Controls = C.Controls.OfType<Control>().ToList();
C.Controls.Clear();
Controls.ForEach(c_inner => RecursivelyKillYourself(c_inner));
} else {
C.Dispose();
num++;
}
}
编辑
修正-必须确保你创建正确的工具提示。而且,正如一位评论员所指出的那样,长时间愚蠢的递归方法是不必要的。简单的处理就行了。
坏的
(new SMcMaster.TabOrderManager(this)).SetTabOrder(SMcMaster.TabOrderManager.TabScheme.AcrossFirst);
好的
ToolTip T = new ToolTip();
T.SetToolTip(btnAddPropertyInvoice, "Add Properties");
components.Add(T);