Пользовательские свойства C # UserControl - PullRequest
3 голосов
/ 27 апреля 2010

Я создаю пользовательский контроль, который предоставляет все общие проверки для диапазона стилей текстовых полей: альфа, число, десятичное число, SSN и т. Д., Поэтому, когда разработчик, использующий этот элемент управления, выбирает стиль альфа, он также может выбрать другой свойство, которое определяет строку специальных символов, которые также могут быть разрешены во время проверки.

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

как мне достичь этой цели?

спасибо

Ответы [ 2 ]

2 голосов
/ 27 апреля 2010

Вы не можете отключить свойства в C # - они являются частью интерфейса вашего типа, который обещает, что вызывающие могут связываться с этими операциями во время компиляции.

Самая простая реализация - игнорировать специальные символы, когда пользователь указывает несовместимый стиль. Это идиоматическое поведение .NET - например, см. CompareValidator, который имеет некоторые взаимоисключающие свойства:

Не устанавливайте оба ControlToCompare и свойство ValueToCompare в в то же время. Вы можете сравнить значение элемента управления вводом другой элемент управления вводом или постоянное значение. Если оба свойства установить, свойство ControlToCompare имеет приоритет.

Сказав это, эта техника делает классы более сложными в использовании, чем они должны быть - их интерфейсы на самом деле не говорят вам, как их использовать. Я рекомендую разбить ваш валидатор на два класса: один для буквенных проверок и один для числовых проверок.

Кроме того, вы можете выдать исключение в вашем сеттере, когда стиль не поддерживает специальные символы. Часто это слишком радикально, но клиентскому программисту становится ясно, что они сделали что-то недопустимое.

0 голосов
/ 27 апреля 2010

Я бы подумал сделать это в установщике свойств

private string specialCharacters = "";
public string SpecialCharacters
{
   get { if ( usingDecimals ) 
           specialCharacters = "";

        return specialCharacters; }

   set { if( usingDecimals )
            value = "";

         specialCharacters = value; }
}

private boolean usingDecimals = false;
public boolean UsingDecimals
{  get { return usingDecimals; } 
   set { usingDecimals = value;
         if( usingDecimals )
             specialCharacters = ""; }
}
...