dev.net.ua

Українська Спільнота Розробникiв
 
Ласкаво просимо до dev.net.ua Увійти | Приєднатися | Допомога | Увійти Live ID
в Пошук

UserControl: проверка заданых свойств в design mode?

Останнє повідомлення 30-11-2008, 13:27 від Eugene Khvedchenya. 2 відповіді.
Сортувати: Попереднє Наступне
  •  04-06-2008, 7:13 6232

    UserControl: проверка заданых свойств в design mode?

    Привет!

    Можно ли на уровне атрибутов свойств настроить проверку данных?Да, то как?Нет, как это можно сделать?

    Например:

    public partial class IntervalOfNumbers : UserControl

    {

       public int Max { }

    }

    Что бы при установке Max, в design mode, больше какого то значения (например 9999), студия ругалась.


    Сергей Лутай
    Помічено як: ,
  •  04-06-2008, 8:44 6234 у відповідь на 6232

    Re: UserControl: проверка заданых свойств в design mode?

    Легко - ні. Вбудованними засобами теж ні.
    Складно - так, можна.
    Для складно, наприклад можна зробити атрибут, а потім в дизайнері прочитавши його щось робити. Можно ще валідейшен блок заюзати. Але як на мене це все ізврат.

    Що це за потреба така для дизайнтайму щось робити, а для рантайму ні...
    MCPD(Web,Windows,Enterprise), MCTS (WPF, WCF)
  •  30-11-2008, 13:27 7237 у відповідь на 6232

    Re: UserControl: проверка заданых свойств в design mode?

    Ну если не подходит ограничение в сеттере..то:

    Вариант 1: Переопределить для своего класса TypeConverter, в котором будет перегружен метод GetProperties, чтобы возвращал адаптеры к свойствам. Внутри этих адаптеров (метод SetValue) нужно будет зашить логику валидации. Недостаток - если класс реализует ICustomTypeDescriptor, работать не будет.

    Нашел похожее тут: http://www.gotdotnet.ru/Forums/Windows/272901.aspx

    Вариант 2: Тоже TypeConverter, но уже для конкретного св-ва. Отталкиваемся от того, что PropertyGrid (PG) в своей работе вызывает метод ConvertFrom для того, чтобы сконвертировать введенное в PG строковое представление в реальное значение объекта. Причем TypeConverter.ConvertFrom вызывается раньше, чем SimplePropertyDescriptor.SetValue (что в общем-то логично). Следовательно, нам нужно вначале определить валидность введенных данных, и вернуть управление дефолтной имплементации в случае, если все Ок.

Переглядати як новосний Блог RSS в XML