创建窗口句柄时出错

时间:2010-11-18 15:32:14

标签: c# winforms

我正在与旧的“错误创建窗口句柄”有趣。我的应用程序有一个中心区域,可以承载用户当前正在进行的任何控制。当用户加载新控件时,我会销毁旧控件。或者至少我试着。当我运行任务管理器时,我惊恐地看到,随着新控件的加载,GDI对象的数量没有减少。这就是我正在做的(尝试)杀掉我已经完成的控制。计数器最后显示了一个巨大的数字,这似乎是正确的,但任务管理器中的GDI对象保持不变,直到达到10,000,然后一切都崩溃了。

    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++;
        }
    }

修改

已修复 - 必须确保正确创建工具提示。另外,正如评论员指出的那样,那种漫长的愚蠢的递归方法是不必要的。只需一个简单的Dispose即可。

(new SMcMaster.TabOrderManager(this)).SetTabOrder(SMcMaster.TabOrderManager.TabScheme.AcrossFirst);

ToolTip T = new ToolTip();
T.SetToolTip(btnAddPropertyInvoice, "Add Properties");
components.Add(T);

1 个答案:

答案 0 :(得分:1)

确认您正在正确处理Dispose