Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

PropertyGrid

2.2K
16 марта 2006 года
micle77
50 / / 14.01.2005
В PropertyGrid в качестве редактора свойства используется ListBox. Редактируемое свойство имеет тип string. Как сделать автоподстановку из ListBox при редактировании поля в PropertyGrid по первому символу не раскрывая ListBox. И как программно раскрыть ListBox при редактировании поля PropertyGrid, то есть не нажимая на кнопку PropertyGrid-а, а именно при вводе первого символа в поле или при установке курсора в это поле. Может нужен другой контрол... Посоветуйте.
273
17 марта 2006 года
3A3-968M
1.2K / / 22.12.2005
Прежлагаю два варианта:
1) Создание своего контрола для работы со свойствами:
PropertyDescriptorCollection properties = TypeDescriptor.GetProperties(button1);

Вот этой строчкой получили список всех свойств кнопки. Теперь имея коллекцию PropertyDescriptor можно вносить её в тот же ListBox.
2) Можно поизвращаться над PropertyGrid. На событие SelectedGridItemChanged получаем, какую запись в гриде редактируем. Для автозаполнения можно использовать свойство Data у GridItem. Допустим происходит редактирование строкового свойства. После окончания редактирования срабатывает свойство PropertyValueChanged. Пишешь такой обработчик:
private void propertyGrid1_PropertyValueChanged(object s, PropertyValueChangedEventArgs e)
{
if(e.ChangedItem.Tag==null) e.ChangedItem.Tag=new List<object>();
else
{
List<object> list = (e.ChangedItem.Tag as
List<object>);
if (!list.Contains(e.ChangedItem.Value))
list.Add(e.ChangedItem.Value);
}
}

Таким образом каждый Tag для свойства в PropertyGrid содержит список ранее набранных значений для автозаполнения.
Потом на обработку события SelectedGridItemChanged пишешь прорисовку отдельно созданного ListBox'а, в который размещаем список значений для автозаполнения. В других случаях этот наш ListBox не виден(Visible=false). На событие ListBox'а SelectedIndexChaged выясняешь, какое из значений выбрано и на собыите KeyPress (на кнопку Enter) убираешь ListBox и вставляешь выбранное значение в соответствующее поле в PropertyGrid.
Уффф! На самом деле в этой идее ничего сложного нет. В результате разбора твоего вопроса у меня получилась небольшая корявая наброска всего этого, могу подкинуть.
2.2K
20 марта 2006 года
micle77
50 / / 14.01.2005
Цитата:
Уффф! На самом деле в этой идее ничего сложного нет. В результате разбора твоего вопроса у меня получилась небольшая корявая наброска всего этого, могу подкинуть.


Если не трудно, подкинь наброску пожалуйста

273
21 марта 2006 года
3A3-968M
1.2K / / 22.12.2005
Ня вот, извиняюсь за задержку, работа напрягает:)
2.2K
21 марта 2006 года
micle77
50 / / 14.01.2005
Цитата:
Originally posted by 3A3-968M
Ня вот, извиняюсь за задержку, работа напрягает:)


Благодарю! Буду разбираться

2.2K
21 марта 2006 года
micle77
50 / / 14.01.2005
У меня 2003 студия. P( Но это ладно...
А вот как она ругается
Цитата:
C:\PROJ\MyPropGrid\MyPropGrid\Form1.cs(133): 'System.Windows.Forms.GridItem' does not contain a definition for 'Tag'

273
22 марта 2006 года
3A3-968M
1.2K / / 22.12.2005
Вообще свойство Tag отвечает за ассоциацию с данными, определёнными пользователем. Не исключено, что в .NET Framework 1.1 есть какое-то свойство, которое за это отвечает. Если нет, то ассоциируй данные с именем свойства, создай хэш-таблицу с помощью класса Hashtable.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог