代码之家  ›  专栏  ›  技术社区  ›  Adam Rackis

创建窗口句柄时出错

  •  2
  • Adam Rackis  · 技术社区  · 14 年前

    我在和“创建窗口句柄时出错”这一古老的乐趣作斗争。我的应用程序有一个中心区域,它托管用户当前正在处理的任何控件。当用户加载新控件时,我会销毁旧控件。或者至少我试过了。当我运行任务管理器时,我惊恐地看到,随着加载新控件,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);
    
    1 回复  |  直到 14 年前
        1
  •  1
  •   Aaron McIver    14 年前

    确认您正在寻址 Dispose 是的。