Программно скрывая свойства в PropertyGrid - PullRequest
3 голосов
/ 23 февраля 2010

Я хочу скрыть / показать свойства в зависимости от того, какой выбор пользователь делает в капле. Я обработал событие нормально, но на самом деле не могу заставить правильные свойства исчезнуть. Решения, которые я нашел в Интернете, в основном относятся к 2005 году, и, поскольку у меня было очень мало опыта с этим, я подумал, что должен делать что-то не так, если скрывать свойства так сложно.

До сих пор я пытался получить доступ к свойству после обработки события, но свойства ReadOnly и IsBrowsable доступны только для чтения.

Propertygrid имеет свойство BrowsableAttributes, которое принимает список атрибутов, но работает только отрицательно и не может делать или - только и. Предоставление коллекции атрибутов; категория - «тест» и «извиняемый» - правда; возвращает те из них, которые совпадают с обоими, и поскольку я не могу предоставить несколько атрибутов AttributeCollections, я не могу сделать поиск достаточно конкретным, чтобы скрыть необходимые, оставив при этом другие видимыми.

Последние пару часов я бился головой о стену, думая, что должен быть более легкий путь.

Ответы [ 2 ]

13 голосов
/ 23 февраля 2010

Вы пытались применить этот атрибут к свойству:

[Browsable(false)]
public object SomeProperty{
}

Таким образом SomeProperty не появится в сетке свойств.

4 голосов
/ 23 февраля 2010

Чтобы сделать то, что вы хотите сделать здесь, вам нужно реализовать ICustomTypeDescriptor в вашем классе, который PropertyGrid будет использовать для запроса вашего класса / объекта, чтобы выяснить, какие элементы отображать в PropertyGrid, как редактировать их, какую категорию / описание они должны иметь и т. д.

Это может быть довольно грязно, но кажется, что в Code Project для вас заранее написан набор вспомогательных классов на http://www.codeproject.com/KB/grid/PropertyGridDynamicProp.aspx.

Я начал писать свою собственную версию кода, представленную в Code Project, и, попав в ловушку, я немного погуглил и нашел ссылку на Code Project. Похоже, они сделали намного лучше, чем я. Я скачал код, и он, кажется, работает довольно хорошо.

Если это не решит вашу проблему, пожалуйста, дайте мне знать, и я буду копать немного глубже.

...