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

Для отображения списка значений этого свойства для всех объектов выбранного класса (их может быть много) у нас на форме не осталось места. Поэтому я решил создать вспомогательную форму FormValues, поместить в нее список (элемент типа ListView) и отобразить в нем найденные значения. Форма FormValues будет работать в режиме модального диалога. Это означает, что она заморозит работу приложения до тех пор, пока пользователь не закроет диалог (форму). Ниже приведен метод, реагирующий на нажатие кнопки btnGetValues.

void btnGetValues_Click(object sender, EventArgs e)

{

FormSplash.ShowForm("Searching for all objects properties... Please, wait");

List<string[]> list = new List<string[]>();

foreach (ManagementObject mo in curClass.GetInstances())

{

string name;

try { name = mo["Name"].ToString(); }

catch

{

name = mo.ToString();

name = name.Substring(name.IndexOf('.') + 1);

}

FormSplash.AddItem(name);

foreach (PropertyData p in curClass.Properties)

{

if (p.Name == listProp.Text)

{

object o = mo[p.Name];

string val = o == null ? "Null" : o.ToString();

list.Add(new string[] {name, val});

FormSplash.AddMsg(val);

}

}

}

FormSplash.CloseForm();

if (list.Count == 0)

new FormMsg(null, "No oblects of " + curClass.ToString() + " found", 5000);

else

{

FormValues form = new FormValues("Values of property: " + listProp.Text, list);

form.ShowDialog();

}

}

Для завершения этого плана вам необходимо добавить в проект Library новую форму FormValues такого вида.

Рис.6. Вид формы для вывода результатов опроса свойств.

В нижней части традиционного SplitContainer'а вы видите элемент ListView с таким набором свойств: View=Details, Name=listValues, FullRowSelect=True, GridLines=True, Dock=Fill. Необходимо также заполнить коллекцию колонок списка. Для этого нажмите кнопку (Collection) в строке свойства Columns окна Properties и добавьте две колонки с такими свойствами:

¨  Первая колонка: Name=colName, Text=Object name, Width=250.

¨  Вторая колонка: Name=colValue, Text=Value, Width=200.

В нижней части разщепителя расположена метка со свойствами: Name=lblCaption, Padding=20; 5; 20; 5, Dock=Fill, AutoSize=True, Font=Verdana; 14,25pt. Ниже приведен результат вывода значений свойства Manufacturer для всех объектов класса Win32_PnPEntity.

Этот класс представляет свойства устройств типа Plug&Play. Как видите, система обнаружила достаточно много экземпляров класса Win32_PnPEntity.

Список этих устройств вы также можете видеть с помощью системной утилиты MMC (Microsoft Management Console), если вызовете для нее оснастку Device Manager (Диспетчер устройств). Запустить MMC в таком режиме можно с помощью команды devmgmt.msc, или mmc devmgmt.msc

Рис.7. Результаты опроса свойства Manufacturer класса Win32_PnPEntity.

Отладка и тестирование

Разработка первого из пяти элементов управления, которые должны обитать в проекте Library, завершена. Процесс отладки и внесения усовершенствований обычно занимает много времени. Результаты этой работы будут учтены при определении вашей оценки. Надеюсь, что вы найдете слабые места приложения, найдете верные решения для устранения недостатков и самостоятельно реализуете их.

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

Теперь следует вдохнуть жизнь в компонент FileSystemControl, который предоставит своим пользователям функциональность, сходную с той, какую дает Windows Explorer. Для этого придется разобраться в технологических деталях управления компонентом FileSystemWatcher. В дереве TreeView (в левой части окна элемента) мы собираемся отобразить структуру папок файловой системы, а в списке справа — файлы, имеющиеся в текущей директории, то есть той папке, которая выбрана в дереве слева.

Мы уже ввели в состав класса FileSystemControl объект treeImages класса ImageList. Он должен ссылаться на сформированный список изображений. Наполните images изображениями дисков и папок. Вспомните, что необходимо иметь по два изображения для каждого элемента файловой системы. Они соответствуют неактивному и активному (Selected) состояниям.