Windows Management Instrumentation. Опрос свойств, методов и описателей. Разработка компонента WMIControl, страница 10

¨  Выделите вкладку 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-архиве, то предварительно надо раскрыть архив.

Разработка компонента WMIControl

При каждой перестройке проекта, а также при переходе в режим дизайна запускаются конструкторы всех внедренных компонентов типа 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 и файла, в котором мы сохраним структуру дерева пространств имен.