Нужен совет как быть с PropertyGrid
От: Аноним  
Дата: 24.08.05 11:32
Оценка:
Здравствуйте.
Уже почти месяц ковыряюсь с PropertyGrid, и в процессе ковыряния выясняется, что он какой-то дубовый.
Например:
нет возможности ввести значение свойства по маске;
не зажигает события от мыши и клавиатуры (мои обратчики на PropertyGrid MouseClick, MouseDown, KeyDown и дрвтжр не срабатывают);
нет возможности управлять форматом вывода названия свойства (я имею ввиду выборочно у одного названия сделать жирный шрифт, поменять цвет шрифта, а у другого нет);
наверное, еще что-то есть, что я забыл или не заметил.

Все-это заставляет задуматься, о том не отказаться ли от него, в тоже время отказываься от него не хочестся, так как штука то хорошая, если бы не перечисленные проблемы.
Дайте совет, не проходите мимо, может это у меня руки кривые, а на самом деле все или, что-то из перечисленного можно сделать?
Re: Нужен совет как быть с PropertyGrid
От: daredevilcs Россия http://helloimyourmind.com/
Дата: 24.08.05 14:27
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>нет возможности ввести значение свойства по маске;

Это можно сделать из самого свойства

А>...

А зачем тебе все это?
... << Anywhere but home :: Hello, I'm your mind >>
Re: Нужен совет как быть с PropertyGrid
От: Dog  
Дата: 24.08.05 14:31
Оценка:
А>Дайте совет, не проходите мимо, может это у меня руки кривые, а на самом деле все или, что-то из перечисленного можно сделать?
Рефлектором ковыряли ?
...где-то между собакой и богом...
Re[2]: Нужен совет как быть с PropertyGrid
От: Аноним  
Дата: 25.08.05 04:44
Оценка:
Здравствуйте, daredevilcs, как приятно услышать человеческий голос на крик вопиющего в пыстыне:

D>Здравствуйте, <Аноним>, Вы писали:


А>>нет возможности ввести значение свойства по маске;

D>Это можно сделать из самого свойства

А>>...

D>А зачем тебе все это?

По поводу маски на само свойство, поясни, пожалуйста, что ты имел ввиду, как это сделать?

А по поводу зачем — на старом win32 проекте, у нас есть подобный компонент на Delphi, и он все это поддерживает, и при переходе на .Net не хочется отказываться от этой функциональности.

А про события то, почему они не срабатывают хотя опубликованы в design-time?
Re[2]: Нужен совет как быть с PropertyGrid
От: Аноним  
Дата: 25.08.05 04:49
Оценка:
Здравствуйте, Dog, как приятно услышать еще один человеческий голос на крик вопиющего в пыстыне:

А>>Дайте совет, не проходите мимо, может это у меня руки кривые, а на самом деле все или, что-то из перечисленного можно сделать?

Dog>Рефлектором ковыряли ?
Рефлектором — по поводу событий? Почему они не срабатывают?
Ковырял, уж как только не ковырял, везде вроде умно написано, почему события на срабатывают не пойму. Может это задумка такая, чтоб события не срабатывали (вернее мои обработчики), но зачем тогда их design-time опубликовали?
Re[3]: Нужен совет как быть с PropertyGrid
От: daredevilcs Россия http://helloimyourmind.com/
Дата: 25.08.05 05:12
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Здравствуйте, daredevilcs, как приятно услышать человеческий голос на крик вопиющего в пыстыне:


А>По поводу маски на само свойство, поясни, пожалуйста, что ты имел ввиду, как это сделать?

Разумеется я не имел ввиду фильтрацию ввода. Простой Validating, когда свойство начинает возмущаться (в его setter'e, естественно, это твой код), когда ему дают неподходяее значение.

А>А по поводу зачем — на старом win32 проекте, у нас есть подобный компонент на Delphi, и он все это поддерживает, и при переходе на .Net не хочется отказываться от этой функциональности.

Framework не идеален, там вообще много чего нет.

А>А про события то, почему они не срабатывают хотя опубликованы в design-time?

Я много таких событий встречал, и не только в в PropertyGrid.

Thanks Microsoft
... << Anywhere but home :: Hello, I'm your mind >>
Re[4]: Нужен совет как быть с PropertyGrid
От: Аноним  
Дата: 25.08.05 06:04
Оценка:
Здравствуйте, daredevilcs, Вы писали:

А>>По поводу маски на само свойство, поясни, пожалуйста, что ты имел ввиду, как это сделать?

D>Разумеется я не имел ввиду фильтрацию ввода. Простой Validating, когда свойство начинает возмущаться (в его setter'e, естественно, это твой код), когда ему дают неподходяее значение.

Здесь немного не то — маска не только и не столько для проверки значения, а чтобы тетеньке не надо было точки в датах расставлять или тире в номерах телефонов (чтобы на цифровой клавиатуре только циферки).

А>>А про события то, почему они не срабатывают хотя опубликованы в design-time?

D>Я много таких событий встречал, и не только в в PropertyGrid.

Можно ли надеяться, что Microsoft исправится? Может это просто конкретный глюк, а в Microsofte сидят там в розовых очках? Может нужно им написать?
Re[3]: Нужен совет как быть с PropertyGrid
От: Dog  
Дата: 25.08.05 07:35
Оценка:
А>>>Дайте совет, не проходите мимо, может это у меня руки кривые, а на самом деле все или, что-то из перечисленного можно сделать?
Dog>>Рефлектором ковыряли ?
А>Рефлектором — по поводу событий? Почему они не срабатывают?
А>Ковырял, уж как только не ковырял, везде вроде умно написано, почему события на срабатывают не пойму. Может это задумка такая, чтоб события не срабатывали (вернее мои обработчики), но зачем тогда их design-time опубликовали?
Всё срабатывает, вы просто не туда кликаете Сам пропертигрид составной контрол и вы кликаете не в сам контрол, а в его части. Ну не передают они эти события родителю , что уж тут поделать. Первое что выстреливает в голову... берём рефлектор, смотрим из чего состоит, дальше в таком духе...
    FieldInfo info = propertyGrid1.GetType().GetField("gridView", BindingFlags.Instance | BindingFlags.NonPublic);
    Control gridView = (Control)info.GetValue(propertyGrid1);
    gridView.Click += new EventHandler(propertyGrid1_Click);
...где-то между собакой и богом...
Re[5]: Нужен совет как быть с PropertyGrid
От: Dog  
Дата: 25.08.05 07:40
Оценка:
А>Здесь немного не то — маска не только и не столько для проверки значения, а чтобы тетеньке не надо было точки в датах расставлять или тире в номерах телефонов (чтобы на цифровой клавиатуре только циферки).
TypeConverter и UITypeEditor спасут Отца Rусской Демократии

А>>>А про события то, почему они не срабатывают хотя опубликованы в design-time?

D>>Я много таких событий встречал, и не только в в PropertyGrid.
А>Можно ли надеяться, что Microsoft исправится? Может это просто конкретный глюк, а в Microsofte сидят там в розовых очках? Может нужно им написать?
Надеяться можно, но вам же надо сейчас ?
...где-то между собакой и богом...
Re[4]: Нужен совет как быть с PropertyGrid
От: Аноним  
Дата: 25.08.05 08:53
Оценка:
Здравствуйте, Dog, Вы писали:

А>>>>Дайте совет, не проходите мимо, может это у меня руки кривые, а на самом деле все или, что-то из перечисленного можно сделать?

Dog>>>Рефлектором ковыряли ?
А>>Рефлектором — по поводу событий? Почему они не срабатывают?
А>>Ковырял, уж как только не ковырял, везде вроде умно написано, почему события на срабатывают не пойму. Может это задумка такая, чтоб события не срабатывали (вернее мои обработчики), но зачем тогда их design-time опубликовали?
Dog>Всё срабатывает, вы просто не туда кликаете Сам пропертигрид составной контрол и вы кликаете не в сам контрол, а в его части. Ну не передают они эти события родителю , что уж тут поделать. Первое что выстреливает в голову... берём рефлектор, смотрим из чего состоит, дальше в таком духе...
Dog>
Dog>    FieldInfo info = propertyGrid1.GetType().GetField("gridView", BindingFlags.Instance | BindingFlags.NonPublic);
Dog>    Control gridView = (Control)info.GetValue(propertyGrid1);
Dog>    gridView.Click += new EventHandler(propertyGrid1_Click);
Dog>

Спасибо большое за совет. Данный трюк удался, но, однако же, от приватного аггрегированного контрола на открытый родительский котрол не приходят события — и это в порядке вещей? Что же, тогда ждать от остального? Может это глюк beta?
Re[5]: Нужен совет как быть с PropertyGrid
От: Dog  
Дата: 25.08.05 09:49
Оценка:
А>Спасибо большое за совет. Данный трюк удался, но, однако же, от приватного аггрегированного контрола на открытый родительский котрол не приходят события — и это в порядке вещей?
А как вы себе это представляете ? Все события автоматически валятся в родителя ? И зачем ему такое счастье ?

А> Что же, тогда ждать от остального? Может это глюк beta?

Не знаю, не видел
...где-то между собакой и богом...
Re[6]: Нужен совет как быть с PropertyGrid
От: Аноним  
Дата: 25.08.05 10:09
Оценка:
Здравствуйте, Dog, Вы писали:

А>>Спасибо большое за совет. Данный трюк удался, но, однако же, от приватного аггрегированного контрола на открытый родительский котрол не приходят события — и это в порядке вещей?

Dog>А как вы себе это представляете ? Все события автоматически валятся в родителя ? И зачем ему такое счастье ?
Ну, как же, просто это явный глюк и не более, в данной ситуации нет понятия родительский контрол, просто визуальный контрол PropertyGrid, т. к. PropertyGrid для пользователя это один компонент, и он (пользователь) не должен вникать из чего он состоит, и соответсвенно должно быть можно пользоваься всеми опубликованными возможностями, и логично, что если к PropertyGrid определить обработчик на MouseClick, то он срабатывал бы, по всей зоне компонета, а не только на тоненькой полосочке отделяющей PropertyGridView (описанный как private) от зоны где выводится описание свойств.
Re[6]: Нужен совет как быть с PropertyGrid
От: Аноним  
Дата: 25.08.05 10:23
Оценка:
Здравствуйте, Dog, Вы писали:

А>>Можно ли надеяться, что Microsoft исправится? Может это просто конкретный глюк, а в Microsofte сидят там в розовых очках? Может нужно им написать?

Dog>Надеяться можно, но вам же надо сейчас ?
Да, надо то как обычно вчера...

А>>Здесь немного не то — маска не только и не столько для проверки значения, а чтобы тетеньке не надо было точки в датах расставлять или тире в номерах телефонов (чтобы на цифровой клавиатуре только циферки).

Dog>TypeConverter и UITypeEditor спасут Отца Rусской Демократии
А можно в этом месте поподробнее, так как TypeConverter и UITypeEditor смотрел подробно, но как они помогут с вводом значений в свойства по маске не нашел.
Re: Нужен совет как быть с PropertyGrid
От: andreich78 Россия  
Дата: 25.08.05 13:32
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте.

А>Уже почти месяц ковыряюсь с PropertyGrid, и в процессе ковыряния выясняется, что он какой-то дубовый.
не то слово.
А>Например:
А>нет возможности ввести значение свойства по маске;
да, неприятно. но и в арсенале стандартных контролов такого тоже нет. вполне возможно реализовать, если повесить обработчики ввода напрямую в тектбокс, который рисует грид.
А>не зажигает события от мыши и клавиатуры (мои обратчики на PropertyGrid MouseClick, MouseDown, KeyDown и дрвтжр не срабатывают);
в соседней ветке подробно написано. всё это можно достать.
А>нет возможности управлять форматом вывода названия свойства (я имею ввиду выборочно у одного названия сделать жирный шрифт, поменять цвет шрифта, а у другого нет);
ага. и еще поменять цвет заливки, использовать градиентную кисть...
А>наверное, еще что-то есть, что я забыл или не заметил.
ну, например показать махонькую картинку после названия свойства, отслеживать клики на ней... ой. это можно
нету, например свойства ReadOnly...
А>Все-это заставляет задуматься, о том не отказаться ли от него, в тоже время отказываься от него не хочестся, так как штука то хорошая, если бы не перечисленные проблемы.
этот контрол, похоже, начали писать раньше всех и очень торопились
лучше — отказаться. не настолько он хорош, чтобы за него цепляться.
А>Дайте совет, не проходите мимо, может это у меня руки кривые, а на самом деле все или, что-то из перечисленного можно сделать?
всё. с небольшими помарками, но всё.
только высоту ячейки не получится менять у конкретного свойства.

идея простая — если ты так хочешь стандартный грид, а в нем всё позакрывали от греха — берешь Reflection, находишь поля, в которых хранится то, что нужно поменять и меняешь. в нужное время. а потом возвращаешь на место.
Re[2]: Нужен совет как быть с PropertyGrid
От: thilorn Украина  
Дата: 25.08.05 13:43
Оценка:
Здравствуйте, andreich78, Вы писали:

A>Здравствуйте, Аноним, Вы писали:


А>> bla-bla-bla

A>нету, например свойства ReadOnly...
да ведь есть, правда не общее, а только к проперти...

A>этот контрол, похоже, начали писать раньше всех и очень торопились

A>лучше — отказаться. не настолько он хорош, чтобы за него цепляться.
Нууууу... Какие есть варианты, столь же удобные, но более гибкие и за которые стоит цепляться?

A>идея простая — если ты так хочешь стандартный грид, а в нем всё позакрывали от греха — берешь Reflection, находишь поля, в которых хранится то, что нужно поменять и меняешь. в нужное время. а потом возвращаешь на место.

Гы, а это как?

Обычная уловка: создатели любой науки обращают бессилие своей науки в клевету против природы. /Ф. Бэкон/
Re[3]: Нужен совет как быть с PropertyGrid
От: andreich78 Россия  
Дата: 25.08.05 13:55
Оценка:
Здравствуйте, thilorn, Вы писали:

T>Здравствуйте, andreich78, Вы писали:


A>>Здравствуйте, Аноним, Вы писали:


А>>> bla-bla-bla

A>>нету, например свойства ReadOnly...
T>да ведь есть, правда не общее, а только к проперти...
текст трудно читаем, это же скорее Enabled, чем ReadOnly... весь контрол иногда нужно лочить без ухудшения читабельности.
A>>этот контрол, похоже, начали писать раньше всех и очень торопились
A>>лучше — отказаться. не настолько он хорош, чтобы за него цепляться.
T>Нууууу... Какие есть варианты, столь же удобные, но более гибкие и за которые стоит цепляться?
например здесь
A>>идея простая — если ты так хочешь стандартный грид, а в нем всё позакрывали от греха — берешь Reflection, находишь поля, в которых хранится то, что нужно поменять и меняешь. в нужное время. а потом возвращаешь на место.
T>Гы, а это как?
при отрисовке грид использует всего пару своих полей, он их в начале работы инициализирует и потом не трогает. Если при начале отрисовки конкретной строчки эти свойства поменять, а по окончании вернуть — строчка отрисуется с желаемым шрифтом, цветом и заливкой.
Re[4]: Нужен совет как быть с PropertyGrid
От: thilorn Украина  
Дата: 25.08.05 14:12
Оценка:
Здравствуйте, andreich78, Вы писали:

A>текст трудно читаем, это же скорее Enabled, чем ReadOnly... весь контрол иногда нужно лочить без ухудшения читабельности.

+

A>например здесь

не могу посмотреть, нета нет...

A>при отрисовке грид использует всего пару своих полей, он их в начале работы инициализирует и потом не трогает. Если при начале отрисовки конкретной строчки эти свойства поменять, а по окончании вернуть — строчка отрисуется с желаемым шрифтом, цветом и заливкой.

Это даже как вариант рассматривать сложно.

Считайте всех людей честными людьми, но живите с ними, как если б они были мошенниками. /Кардинал Мазарини/
Re[5]: Нужен совет как быть с PropertyGrid
От: andreich78 Россия  
Дата: 25.08.05 14:14
Оценка:
Здравствуйте, thilorn, Вы писали:

T>Здравствуйте, andreich78, Вы писали:


A>>текст трудно читаем, это же скорее Enabled, чем ReadOnly... весь контрол иногда нужно лочить без ухудшения читабельности.

T>+

A>>например здесь

T>не могу посмотреть, нета нет...

A>>при отрисовке грид использует всего пару своих полей, он их в начале работы инициализирует и потом не трогает. Если при начале отрисовки конкретной строчки эти свойства поменять, а по окончании вернуть — строчка отрисуется с желаемым шрифтом, цветом и заливкой.

T>Это даже как вариант рассматривать сложно.
угу. и реализовывать геморно. потому и советую не цепляться за грид.
Re[2]: Нужен совет как быть с PropertyGrid
От: Аноним  
Дата: 25.08.05 14:15
Оценка:
Здравствуйте, andreich78, Вы писали:

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

По правде, говоря, не уверен, что так получится, тексбокс он создает динамически, как отследить момент когда он создается непонятно.
А>>не зажигает события от мыши и клавиатуры (мои обратчики на PropertyGrid MouseClick, MouseDown, KeyDown и дрвтжр не срабатывают);
A>в соседней ветке подробно написано. всё это можно достать.
Не все, KeyDown/KeyPress сразу без возврата уходят на создание динамического текстбокса
A>ага. и еще поменять цвет заливки, использовать градиентную кисть...
Кстати, и заливку было бы не плохо менять у lable свойтсва.
A>ну, например показать махонькую картинку после названия свойства, отслеживать клики на ней... ой. это можно
Нарисовать-то можно, а как клики отслеживать тоже через вытащенный через Reflection MouseClick? Или есть более легальный способ?
A>нету, например свойства ReadOnly...
С этим то как раз проблем нет, правда становится он серым, так я говорю хочется цвет и стиль шрифта у label свойства.
A>лучше — отказаться. не настолько он хорош, чтобы за него цепляться.
Конечно, SmartPropertyGrid на сайте нарисован красиво, но был бы он бесплатный, а еще лучше в комплекте поставки Framework, тогда бы уууу...

A>идея простая — если ты так хочешь стандартный грид, а в нем всё позакрывали от греха — берешь Reflection, находишь поля, в которых хранится то, что нужно поменять и меняешь. в нужное время. а потом возвращаешь на место.

Идея простая, но как-то это все через форточку с сигнализацией, хочется как-то дверями пользоваться. А то вдруг добрые разработчики поменяют название private свойства к которому я через Reflection лажу, и карачун.
Re[5]: Нужен совет как быть с PropertyGrid
От: andreich78 Россия  
Дата: 25.08.05 14:18
Оценка:
Здравствуйте, thilorn, Вы писали:

T>Здравствуйте, andreich78, Вы писали:


A>>текст трудно читаем, это же скорее Enabled, чем ReadOnly... весь контрол иногда нужно лочить без ухудшения читабельности.

T>+

A>>например здесь

T>не могу посмотреть, нета нет...
есть в MFC контрол, по мотивам которого написан .NET`овский пропертигрид. так вот он — умеет почти всё. есть фирмы, которые уже сделали к этому контролу обертки под .NET
в MSDN статья
HOW TO: Design a Resizable MFC Property Sheet in Visual C++ .NET
я не вчитывался, но это о нем.
Re[3]: Нужен совет как быть с PropertyGrid
От: andreich78 Россия  
Дата: 25.08.05 14:23
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, andreich78, Вы писали:


А>Идея простая, но как-то это все через форточку с сигнализацией, хочется как-то дверями пользоваться. А то вдруг добрые разработчики поменяют название private свойства к которому я через Reflection лажу, и карачун.

короче, мне пришлось всё это реализовать на стандартном гриде. описанным выше способом. других путей я не нашел. если нужна помощь — помогу советом, если нужны исходники — не смогу помочь.
Re[4]: Нужен совет как быть с PropertyGrid
От: Аноним  
Дата: 25.08.05 14:36
Оценка:
Здравствуйте, andreich78, Вы писали:

Совет то, что нужно.

Например,
A>ну, например показать махонькую картинку после названия свойства, отслеживать клики на ней... ой. это можно
Нарисовать-то можно, а как клики отслеживать тоже через вытащенный через Reflection MouseClick? Или есть более легальный способ? Имелось ввиду клики отслеживать тоже через Reflection?
Re[5]: Нужен совет как быть с PropertyGrid
От: andreich78 Россия  
Дата: 25.08.05 14:46
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, andreich78, Вы писали:


А>Совет то, что нужно.


А>Например,

A>>ну, например показать махонькую картинку после названия свойства, отслеживать клики на ней... ой. это можно
А>Нарисовать-то можно, а как клики отслеживать тоже через вытащенный через Reflection MouseClick? Или есть более легальный способ? Имелось ввиду клики отслеживать тоже через Reflection?

это я написал про интерфейс IPropertyValueUIService
вешает децельные картинки в столбце названий и бросает наружу сообщения о двойных щелчках по картинкам.
еще заявлена возможность изменять тултип свойства в гриде, но, похоже не реализован.
интерфейс поддерживается в design-time, нов рантайме потребуется собственная реализация ISite на родительской форме. или через рефлекшн присвоить пару свойств.
кстати способ с отслеживанием кликов через рефлекшн — самый надежный.
Re[6]: Нужен совет как быть с PropertyGrid
От: Proletarius  
Дата: 25.08.05 15:29
Оценка:
Здравствуйте, andreich78, Вы писали:

A>это я написал про интерфейс IPropertyValueUIService

A>вешает децельные картинки в столбце названий и бросает наружу сообщения о двойных щелчках по картинкам.
A>еще заявлена возможность изменять тултип свойства в гриде, но, похоже не реализован.
A>интерфейс поддерживается в design-time, нов рантайме потребуется собственная реализация ISite на родительской форме. или через рефлекшн присвоить пару свойств.
A>кстати способ с отслеживанием кликов через рефлекшн — самый надежный.

Это я. Завел себе логин.
А я думал, что про GetPaintValueSupported и PaintValue у UITypeEditor.
Кстати, Dog написал, что UITypeEditor и TypeConverter помогут с вопросом ввода по маске.
Я что-то не вижу каким образом.

Про реализацию ISite, можно подробнее, не укладывается в голове как через реализацию свойств:
Component,
Container,
DesignMode,
Name,
можно потом через GetService запросить IPropertyValueUIService, у кого? В примере, что-то неясно, класс со свойствами описывает еще свойство типа ISite, а в нем у себя запрашивает этот интерфейс:
        public override System.ComponentModel.ISite Site
        {
            get
            {
                return base.Site;
            }
            set
            {                
                if( value != null )
                {
                    base.Site = value;
                    IPropertyValueUIService uiService = (IPropertyValueUIService)this.GetService(typeof(IPropertyValueUIService));
                    if( uiService != null )                    
                        uiService.AddPropertyValueUIHandler( new PropertyValueUIHandler(this.marginPropertyValueUIHandler) );                                        
                }
                else
                {
                    IPropertyValueUIService uiService = (IPropertyValueUIService)this.GetService(typeof(IPropertyValueUIService));
                    if( uiService != null )                    
                        uiService.RemovePropertyValueUIHandler( new PropertyValueUIHandler(this.marginPropertyValueUIHandler) );                                        
                    base.Site = value;
                }
            }
        }
Re: Нужен совет как быть с PropertyGrid
От: Аноним  
Дата: 26.08.05 06:05
Оценка:
>нету, например свойства ReadOnly...

ReadOnly мжно указать в PropertyDescriptor конкретного поля (я так думаю!)


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Re[6]: Нужен совет как быть с PropertyGrid
От: Proletarius  
Дата: 26.08.05 07:53
Оценка:
Здравствуйте, andreich78, Вы писали:

A>это я написал про интерфейс IPropertyValueUIService

A>вешает децельные картинки в столбце названий и бросает наружу сообщения о двойных щелчках по картинкам.
A>еще заявлена возможность изменять тултип свойства в гриде, но, похоже не реализован.
A>интерфейс поддерживается в design-time, нов рантайме потребуется собственная реализация ISite на родительской форме. или через рефлекшн присвоить пару свойств.
A>кстати способ с отслеживанием кликов через рефлекшн — самый надежный.

Или имелось ввиду перекрыть свойство Site у родительской формы?
Тогда, наверное, в моем случае, свойстово типа ISite надо добавить у класса-реализации ICustomTypeDescriptor, так как свойства — динамические.
Re[7]: Нужен совет как быть с PropertyGrid
От: andreich78 Россия  
Дата: 26.08.05 07:56
Оценка:
P>Это я. Завел себе логин.
P>А я думал, что про GetPaintValueSupported и PaintValue у UITypeEditor.
они работают со столбцом значений. клики на картинках отдельно не обрабатывают.

P>Кстати, Dog написал, что UITypeEditor и TypeConverter помогут с вопросом ввода по маске.

P>Я что-то не вижу каким образом.

P>Про реализацию ISite, можно подробнее, не укладывается в голове как через реализацию свойств:

P>Component,
P>Container,
P>DesignMode,
P>Name,
P>можно потом через GetService запросить IPropertyValueUIService, у кого? В примере, что-то неясно, класс со свойствами описывает еще свойство типа ISite, а в нем у себя запрашивает этот интерфейс:

правильно что не укладывается, я похоже спутал ISite с другим интерфейсом или методом, потом поищу.
Суть такая — Проперть Site пропертигриду назначает кто-то извне. При назначении этой проперти он запрашивает у этого ISite`а сервиспровайдера. почти как в примере, только сервис — IServiceProvider. Экземпляр он сохраняет и за различными интерфейсами обращается к нему. в том числе и за IPropertyValueUIService.
Таким образом, есть два пути подставить пропертигриду собственною реализацию IPropertyValueUIService:
— присвоить ему нестандартное значение Site. такое, чтобы оно вернуло твой ServiceProvider. тогда пропертигрид возьмет то что нужно самостоятельно.
— достать через Reflection внутреннее поле, в котором живет сервиспровайдер и назначить его, минуя Site.

вот что я имел в виду, когда говорил о реализации ISite на родительской форме.
совершенно конечно не так надобыло сказать, ближе будет "реализация присваивания родительской формой свойства Site пропертигриду".
Re[8]: Нужен совет как быть с PropertyGrid
От: Proletarius  
Дата: 26.08.05 13:01
Оценка:
A>Суть такая — Проперть Site пропертигриду назначает кто-то извне. При назначении этой проперти он запрашивает у этого ISite`а сервиспровайдера. почти как в примере, только сервис — IServiceProvider. Экземпляр он сохраняет и за различными интерфейсами обращается к нему. в том числе и за IPropertyValueUIService.
A>Таким образом, есть два пути подставить пропертигриду собственною реализацию IPropertyValueUIService:
A>- присвоить ему нестандартное значение Site. такое, чтобы оно вернуло твой ServiceProvider. тогда пропертигрид возьмет то что нужно самостоятельно.
A>- достать через Reflection внутреннее поле, в котором живет сервиспровайдер и назначить его, минуя Site.

В design-time все работает отлично, а в runtime, imho оно заработать не сможет, так этот кто-то, кто назначает PropertyGrid.Site и поддерживает IPropertyValueUIService, это DesignHost, а runtime его просто нет, если конечно с нуля не реализовать, или подключить Microsoft.VisualStudio.dll. По моему так.
Re[9]: Нужен совет как быть с PropertyGrid
От: andreich78 Россия  
Дата: 26.08.05 13:06
Оценка:
P>В design-time все работает отлично, а в runtime, imho оно заработать не сможет, так этот кто-то, кто назначает PropertyGrid.Site и поддерживает IPropertyValueUIService, это DesignHost, а runtime его просто нет, если конечно с нуля не реализовать, или подключить Microsoft.VisualStudio.dll. По моему так.

всё правильно, кроме вывода — реализовать designerhost не нужно, пропертигрид вызывает у него всего пару методов. достаточно перекрыть толmко GetService(Type)
Re[10]: Нужен совет как быть с PropertyGrid
От: Proletarius  
Дата: 26.08.05 13:49
Оценка:
Здравствуйте, andreich78, Вы писали:


A>всё правильно, кроме вывода — реализовать designerhost не нужно, пропертигрид вызывает у него всего пару методов. достаточно перекрыть толmко GetService(Type)


Извиняюсь, конечно, за тупость, но у чего перекрыть GetService(Type), а главное у чего запрашивать IPropertyValueUIService, если его поддерживает только DesignerHost?
Re[11]: Нужен совет как быть с PropertyGrid
От: andreich78 Россия  
Дата: 26.08.05 14:02
Оценка:
Здравствуйте, Proletarius, Вы писали:

P>Здравствуйте, andreich78, Вы писали:



A>>всё правильно, кроме вывода — реализовать designerhost не нужно, пропертигрид вызывает у него всего пару методов. достаточно перекрыть толmко GetService(Type)


P>Извиняюсь, конечно, за тупость, но у чего перекрыть GetService(Type), а главное у чего запрашивать IPropertyValueUIService, если его поддерживает только DesignerHost?


так.
делаешь класс, реализующий IDesignerHost. в этом классе единственным работающим методом делаешь GetService.
вот с таким кодом:


            public object GetService(Type service)
            {
                if (service == typeof(System.Drawing.Design.IPropertyValueUIService))
                {

                    if (propertyValueUIService == null)
                    {
                        propertyValueUIService = new DummyPropertyValueUIService(owner);
                        propertyValueUIService.AddPropertyValueUIHandler(new System.Drawing.Design.PropertyValueUIHandler(PropertyValueUIHandler));
                    }
                    return propertyValueUIService;
                }
                return owner.GetService(service);
            }


у меня в роли owner`а сам пропертигрид, так что если из недр придет запрос на что-нить экзотическое — можно спокойно подставить свою реализацию этого нечта.
а вообще-то можно вместо
return owner.GetService(service);
поставить
return null;
Re[12]: Нужен совет как быть с PropertyGrid
От: Proletarius  
Дата: 26.08.05 14:59
Оценка:
Здравствуйте, andreich78, Вы писали:

A>так.

A>делаешь класс, реализующий IDesignerHost. в этом классе единственным работающим методом делаешь GetService.
A>вот с таким кодом:

A>

A>            public object GetService(Type service)
A>            {
A>                if (service == typeof(System.Drawing.Design.IPropertyValueUIService))
A>                {

A>                    if (propertyValueUIService == null)
A>                    {
A>                        propertyValueUIService = new DummyPropertyValueUIService(owner);
A>                        propertyValueUIService.AddPropertyValueUIHandler(new System.Drawing.Design.PropertyValueUIHandler(PropertyValueUIHandler));
A>                    }
A>                    return propertyValueUIService;
A>                }
A>                return owner.GetService(service);
A>            }

A>

И этот класс через reflection подсунуть в PropertyGrid.designerHost?
Кстати, здесь еще реализуется IPropertyValueUIService (DummyPropertyValueUIService), где можно почитать, что там нужно писать, примера реализации ковыряясь через reflection не нашел, в том числе и в DesignerHost.
Re[13]: Нужен совет как быть с PropertyGrid
От: andreich78 Россия  
Дата: 26.08.05 15:05
Оценка:
P>И этот класс через reflection подсунуть в PropertyGrid.designerHost?
да, я делал так.
P>Кстати, здесь еще реализуется IPropertyValueUIService (DummyPropertyValueUIService), где можно почитать, что там нужно писать, примера реализации ковыряясь через reflection не нашел, в том числе и в DesignerHost.
это просто реализация этого интерфейса, ничего кроме заполнения пары методов и одного события. можешь рефлектором выдрать из стандартной реализации, если не получится самому запрограммировать.

пока, я щас уже спешу.

слушай, а нахрена тебе этот интерфейс сдался? я им в итоге не пользовался ни разу!
мышь и отрисовка своим фонтом через него не идут!
Re[14]: Нужен совет как быть с PropertyGrid
От: Proletarius  
Дата: 26.08.05 15:16
Оценка:
Здравствуйте, andreich78, Вы писали:


P>>И этот класс через reflection подсунуть в PropertyGrid.designerHost?

A>да, я делал так.
P>>Кстати, здесь еще реализуется IPropertyValueUIService (DummyPropertyValueUIService), где можно почитать, что там нужно писать, примера реализации ковыряясь через reflection не нашел, в том числе и в DesignerHost.
A>это просто реализация этого интерфейса, ничего кроме заполнения пары методов и одного события. можешь рефлектором выдрать из стандартной реализации, если не получится самому запрограммировать.

Нашел реализацию IPropertyValueUIService в Microsoft.VisualStudio.Designer.Service.

A>пока, я щас уже спешу.


A>слушай, а нахрена тебе этот интерфейс сдался? я им в итоге не пользовался ни разу!

A>мышь и отрисовка своим фонтом через него не идут!

Просто, это уже почти, то что нужно. Только вместо одного щелчка — двойной, и свой обработчик.
Re[14]: Нужен совет как быть с PropertyGrid
От: Proletarius  
Дата: 26.08.05 15:28
Оценка:
Здравствуйте, andreich78, Вы писали:


P>>И этот класс через reflection подсунуть в PropertyGrid.designerHost?

A>да, я делал так.
P>>Кстати, здесь еще реализуется IPropertyValueUIService (DummyPropertyValueUIService), где можно почитать, что там нужно писать, примера реализации ковыряясь через reflection не нашел, в том числе и в DesignerHost.
A>это просто реализация этого интерфейса, ничего кроме заполнения пары методов и одного события. можешь рефлектором выдрать из стандартной реализации, если не получится самому запрограммировать.

A>пока, я щас уже спешу.


A>слушай, а нахрена тебе этот интерфейс сдался? я им в итоге не пользовался ни разу!

A>мышь и отрисовка своим фонтом через него не идут!

Хорошо, что мир не без добрых людей.
Спасибо, получилось.
Только почему-то два раза рисуется — буду разбираться.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.