Ошибка создания дескриптора окна - PullRequest
2 голосов
/ 18 ноября 2010

Я сражаюсь со старым забавным "Ошибка создания дескриптора окна". У моего приложения есть центральная область, в которой находится любой элемент управления, над которым в данный момент работает пользователь. Когда пользователь загружает новый элемент управления, я уничтожаю старый. Или, по крайней мере, я пытаюсь. Когда я запускаю диспетчер задач, я с ужасом вижу, что количество объектов 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++;
        }
    }

EDIT

Исправлено - нужно убедиться, что вы правильно создаете подсказки. Также, как отметил комментатор, этот длинный глупый рекурсивный метод не нужен. Подойдет простое распоряжение.

плохой

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

хорошо

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

1 Ответ

1 голос
/ 18 ноября 2010

Убедитесь, что вы адресуете Утилизируйте правильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...