Приложение Windows Form обрабатывает ошибку - PullRequest
0 голосов
/ 26 июня 2011

У меня есть приложение формы Windows, в котором есть две основные панели: слева - узкая полоса с рядом переключателей.Панель справа содержит Tabcontrol, к которому добавлено несколько вкладок, которые пользователь может выбирать среди верхних.К каждой из этих вкладок добавлено около 7 DataGridView.Каждый DataGridView содержит около 5-6 столбцов текста с переменным количеством строк (10-500).Добавленные к нему данные были сделаны непосредственно в сам DGV, то есть с помощью метода DGV.Rows.Add (), передавая массив объектов, а не через источник данных.

Когда пользователь выбирает другую вкладку, отображаемая сетка данных зависит от радиокнопки, выбранной слева.Я выполняю это, обрабатывая событие SelectedIndexChange tabcontrol и каждого события CheckedChange радиокнопки.

Внутри события SelectedIndexChange tabcontrol я программно проверил текущийвыбранная кнопка радио.Затем в событии радиокнопки CheckedChange я перебираю все DataGridView в selectedTab TabControl и скрываю все те, которые не соответствуют тому, который соответствует выбранной радиокнопке.

Моя проблемакаждый раз, когда пользователь начинает переключаться между множеством вкладок или пытается просмотреть DGV, имеющий много строк, программа выдает следующую ошибку:

System.ComponentModel.Win32Exxception: Ошибка создания дескриптора окна.

Кто-нибудь знает, что может вызвать вышеуказанную ошибку?Первоначально я подозревал, что когда я переключаюсь на другую вкладку, DGV на исходной вкладке, на которой я находился, все еще находится в памяти, но когда я пытаюсь вызвать .Dispose (), DGV просто исчезает.Может быть, я здесь упускаю что-то фундаментальное.

1 Ответ

0 голосов
/ 26 июня 2011

Проблема в том, что вы, вероятно, пытаетесь показать удаленного DataGridView.

Не распоряжайтесь никакими Control в своей форме, если только вы ранее не удаляете их из соответствующей коллекции Container.Controls (потому что она вам больше не нужна и / или вы планируете добавить новую вместо нее). В противном случае утилизируйте все элементы управления при закрытии и утилизации Form, в котором они содержатся, при необходимости.

Чтобы отобразить правильное значение DataGridView в зависимости от выбранной вкладки и пользовательских параметров, используйте свойство Visible или динамически добавляйте и удаляйте необходимые элементы управления в коллекцию Controls контейнера (в данном случае TabPage.Controls. * 1013). *

Если это не так, то, возможно, у вас есть «утечка управления» (возможно, обработчик событий, удерживающий объект), и вы превышаете предел дескриптора окна для любого данного приложения (10.000, я думаю, что это так).

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