¨ Выделите вкладку tabClasses, найдите в верхней части Toolbox'а компонент WMIControl и положите его на активную вкладку tabControl'а. Задайте свойства: Name=wmi, Dock=Fill.
¨ Выделите вкладку tabFileSystem, найдите в верхней части Toolbox'а компонент FileSystemControl и положите его на активную вкладку tabControl'а. Задайте свойства: Name=fileSystem, Dock=Fill.
¨ Запустите решение (из двух проектов) и убедитесь, что главное окно отображает оба компонента.
Потренируйтесь в создании новых ветвей дерева, вставляя в обработчик события Load компонента WMIControl фрагменты кода.
treeNS.Nodes.Add(new TreeNode("One",0,5));
treeNS.Nodes[0].Nodes.Add(new TreeNode("Two",1,5));
treeNS.Nodes[0].Nodes.Add(new TreeNode("Three",2,5));
Запустите приложение, а затем опробуйте более сложную структуру кроны дерева:
treeNS.Nodes.Add(new TreeNode("One",0,5));
TreeNode node = treeNS.Nodes[0];
node.Nodes.Add(new TreeNode("Two",1,5));
node.Nodes.Add(new TreeNode("Three",2,5));
node.Nodes[0].Nodes.Add(new TreeNode("Four",3,5));
node.Expand();
node.Nodes[0].Expand();
Просмотрите справку по классу TreeNode, выясните смысл параметров его конструктора, познакомьтесь с методами класса и научитесь управлять структурой и состоянием дерева программным способом (с помощью кода). Способны ли вы теперь создать дерево с любой желаемой структурой? Если нет, то продолжайте тренировку до тех пор, пока не ответите на поставленный вопрос утвердительно.
Удалите из списка изображений все учебные изображения, уничтожьте соответствующие им bitmap-файлы и наполните images изображениями, которые будут соответствовать пространствам имен и классам WMI. Учтите, что желательно (а в нашем проекте необходимо) иметь по два изображения для каждого узла дерева. Они соответствуют неактивному и активному (Selected) состояниям. Напомню, что необходимые нам изображения можно найти в папке студии (C:\Program Files\Microsoft Visual Studio 9.0\Common7 \VS2008ImageLibrary). Если файлы изображений находятся в ZIP-архиве, то предварительно надо раскрыть архив.
При каждой перестройке проекта, а также при переходе в режим дизайна запускаются конструкторы всех внедренных компонентов типа UserControl. Такой сценарий довольно сильно тормозит разработку проекта, а иногда и вносит момент неопределенности (конструктор запускается в неожиданный момент работы с приложением). Поэтому мы собираемся удалить из формы разработанный нами компонент WMIControl.
Внимание. Мы не удаляем компонент, как часть системы (проект WMIControl должен остаться в решении), но мы удаляем объект wmi типа WMIControl из части кода формы главного приложения (MainForm.Disigner.cs). Вместо этого мы добавим этот компонент вручную. Такой сценарий значительно ускорит процесс разработки. Не перепутайте форму приложения и UserControl, та как оба имеют режим дизайна и файлы с кодом дизайнера.
¨ Переведите форму (проекта Client) в режим дизайна и удалите компонент WMIControl.
¨ Перейдите в режим разработки кода формы и добавьте объявление компонента в состав класса MainForm.
WMIControl wmi;
¨ В конструктор формы добавьте код создания элемента.
wmi = new WMIControl();
¨ Добавьте реакцию формы на событие Load. В обработчик этого события вставьте следующий код.
void MainForm_Load(object sender, EventArgs e)
{
SetDesktopLocation(10, 10);
tabClasses.Controls.Add(wmi);
wmi.Dock = DockStyle.Fill;
wmi.TabIndex = 0;
}
¨ Переведите фокус в компонент WMIControl и откройте его в режиме View Code.
¨ Добавьте в класс WMIControl такое множество переменных.
int nsCount, nsHidden, nClasses, nProps, nMethods, nQualifiers;
string nsName, clsName, xmlFile;
ManagementClass curClass;
XDocument xDoc;
В первой строке мы определили множество счетчиков объектов WMI, которые будут обнаружены в результате опроса базы данных. Это счетчики: пространств имен, классов, свойств, методов и описателей. Вторая строка определяет имена: текущего пространства имен, текущего класса WMI и файла, в котором мы сохраним структуру дерева пространств имен.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.