2010-04-27 3 views
3

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

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

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

благодаря

+0

Не знаете, как это работает, но, может быть, некоторые могут объяснить, как «расширенные» свойства элемента управления, такие как подсказка инструмента, добавляющая свойство для каждого активного элемента управления. Я не мог найти хороший пример, но вы могли бы использовать этот шаблон для динамического добавления свойств в свой элемент управления? – Mike

ответ

0

я считал бы это делать в инкубаторе свойств

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 = ""; } 
} 
2

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

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

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

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

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

Смежные вопросы