Здравствуйте.
Уже почти месяц ковыряюсь с PropertyGrid, и в процессе ковыряния выясняется, что он какой-то дубовый.
Например:
нет возможности ввести значение свойства по маске;
не зажигает события от мыши и клавиатуры (мои обратчики на PropertyGrid MouseClick, MouseDown, KeyDown и дрвтжр не срабатывают);
нет возможности управлять форматом вывода названия свойства (я имею ввиду выборочно у одного названия сделать жирный шрифт, поменять цвет шрифта, а у другого нет);
наверное, еще что-то есть, что я забыл или не заметил.
Все-это заставляет задуматься, о том не отказаться ли от него, в тоже время отказываься от него не хочестся, так как штука то хорошая, если бы не перечисленные проблемы.
Дайте совет, не проходите мимо, может это у меня руки кривые, а на самом деле все или, что-то из перечисленного можно сделать?
Здравствуйте, <Аноним>, Вы писали:
А>нет возможности ввести значение свойства по маске;
Это можно сделать из самого свойства
А>...
А зачем тебе все это?
... << Anywhere but home :: Hello, I'm your mind >>
А>Дайте совет, не проходите мимо, может это у меня руки кривые, а на самом деле все или, что-то из перечисленного можно сделать?
Рефлектором ковыряли ?
...где-то между собакой и богом...
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 опубликовали?
Здравствуйте, <Аноним>, Вы писали:
А>Здравствуйте, 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 сидят там в розовых очках? Может нужно им написать?
А>>>Дайте совет, не проходите мимо, может это у меня руки кривые, а на самом деле все или, что-то из перечисленного можно сделать? 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);
А>Здесь немного не то — маска не только и не столько для проверки значения, а чтобы тетеньке не надо было точки в датах расставлять или тире в номерах телефонов (чтобы на цифровой клавиатуре только циферки).
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?
А>Спасибо большое за совет. Данный трюк удался, но, однако же, от приватного аггрегированного контрола на открытый родительский котрол не приходят события — и это в порядке вещей?
А как вы себе это представляете ? Все события автоматически валятся в родителя ? И зачем ему такое счастье ?
А> Что же, тогда ждать от остального? Может это глюк 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 смотрел подробно, но как они помогут с вводом значений в свойства по маске не нашел.
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте. А>Уже почти месяц ковыряюсь с PropertyGrid, и в процессе ковыряния выясняется, что он какой-то дубовый.
не то слово. А>Например: А>нет возможности ввести значение свойства по маске;
да, неприятно. но и в арсенале стандартных контролов такого тоже нет. вполне возможно реализовать, если повесить обработчики ввода напрямую в тектбокс, который рисует грид. А>не зажигает события от мыши и клавиатуры (мои обратчики на PropertyGrid MouseClick, MouseDown, KeyDown и дрвтжр не срабатывают);
в соседней ветке подробно написано. всё это можно достать. А>нет возможности управлять форматом вывода названия свойства (я имею ввиду выборочно у одного названия сделать жирный шрифт, поменять цвет шрифта, а у другого нет);
ага. и еще поменять цвет заливки, использовать градиентную кисть... А>наверное, еще что-то есть, что я забыл или не заметил.
ну, например показать махонькую картинку после названия свойства, отслеживать клики на ней... ой. это можно
нету, например свойства ReadOnly... А>Все-это заставляет задуматься, о том не отказаться ли от него, в тоже время отказываься от него не хочестся, так как штука то хорошая, если бы не перечисленные проблемы.
этот контрол, похоже, начали писать раньше всех и очень торопились
лучше — отказаться. не настолько он хорош, чтобы за него цепляться. А>Дайте совет, не проходите мимо, может это у меня руки кривые, а на самом деле все или, что-то из перечисленного можно сделать?
всё. с небольшими помарками, но всё.
только высоту ячейки не получится менять у конкретного свойства.
идея простая — если ты так хочешь стандартный грид, а в нем всё позакрывали от греха — берешь Reflection, находишь поля, в которых хранится то, что нужно поменять и меняешь. в нужное время. а потом возвращаешь на место.
Здравствуйте, andreich78, Вы писали:
A>Здравствуйте, Аноним, Вы писали:
А>> bla-bla-bla A>нету, например свойства ReadOnly...
да ведь есть, правда не общее, а только к проперти...
A>этот контрол, похоже, начали писать раньше всех и очень торопились A>лучше — отказаться. не настолько он хорош, чтобы за него цепляться.
Нууууу... Какие есть варианты, столь же удобные, но более гибкие и за которые стоит цепляться?
A>идея простая — если ты так хочешь стандартный грид, а в нем всё позакрывали от греха — берешь Reflection, находишь поля, в которых хранится то, что нужно поменять и меняешь. в нужное время. а потом возвращаешь на место.
Гы, а это как?
Обычная уловка: создатели любой науки обращают бессилие своей науки в клевету против природы. /Ф. Бэкон/
Здравствуйте, thilorn, Вы писали:
T>Здравствуйте, andreich78, Вы писали:
A>>Здравствуйте, Аноним, Вы писали:
А>>> bla-bla-bla A>>нету, например свойства ReadOnly... T>да ведь есть, правда не общее, а только к проперти...
текст трудно читаем, это же скорее Enabled, чем ReadOnly... весь контрол иногда нужно лочить без ухудшения читабельности. A>>этот контрол, похоже, начали писать раньше всех и очень торопились A>>лучше — отказаться. не настолько он хорош, чтобы за него цепляться. T>Нууууу... Какие есть варианты, столь же удобные, но более гибкие и за которые стоит цепляться?
например здесь A>>идея простая — если ты так хочешь стандартный грид, а в нем всё позакрывали от греха — берешь Reflection, находишь поля, в которых хранится то, что нужно поменять и меняешь. в нужное время. а потом возвращаешь на место. T>Гы, а это как?
при отрисовке грид использует всего пару своих полей, он их в начале работы инициализирует и потом не трогает. Если при начале отрисовки конкретной строчки эти свойства поменять, а по окончании вернуть — строчка отрисуется с желаемым шрифтом, цветом и заливкой.
Здравствуйте, andreich78, Вы писали:
A>текст трудно читаем, это же скорее Enabled, чем ReadOnly... весь контрол иногда нужно лочить без ухудшения читабельности.
+
A>например здесь
не могу посмотреть, нета нет...
A>при отрисовке грид использует всего пару своих полей, он их в начале работы инициализирует и потом не трогает. Если при начале отрисовки конкретной строчки эти свойства поменять, а по окончании вернуть — строчка отрисуется с желаемым шрифтом, цветом и заливкой.
Это даже как вариант рассматривать сложно.
Считайте всех людей честными людьми, но живите с ними, как если б они были мошенниками. /Кардинал Мазарини/
Здравствуйте, 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 лажу, и карачун.
Здравствуйте, 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
я не вчитывался, но это о нем.