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