Для отображения списка значений этого свойства для всех объектов выбранного класса (их может быть много) у нас на форме не осталось места. Поэтому я решил создать вспомогательную форму 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, который предоставит своим пользователям функциональность, сходную с той, какую дает Windows Explorer. Для этого придется разобраться в технологических деталях управления компонентом FileSystemWatcher. В дереве TreeView (в левой части окна элемента) мы собираемся отобразить структуру папок файловой системы, а в списке справа — файлы, имеющиеся в текущей директории, то есть той папке, которая выбрана в дереве слева.
Мы уже ввели в состав класса FileSystemControl объект treeImages класса ImageList. Он должен ссылаться на сформированный список изображений. Наполните images изображениями дисков и папок. Вспомните, что необходимо иметь по два изображения для каждого элемента файловой системы. Они соответствуют неактивному и активному (Selected) состояниям.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.