2009-06-12 14 views
0

Я разрабатываю новый настраиваемый элемент управления в VisualStudio и задаюсь вопросом, можете ли вы ограничить выбор свойств во время разработки.Предоставление свойств пользовательского контроля

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

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

В настоящее время у меня есть это:

public enum VerticalTextSide { Left, Right } 
public enum HorizontalTextSide { Top, Bottom } 
public enum TextSide { } 
public enum Orientation { Vertical, Horizontal } 

private VerticalTextSide vts; 
private HorizontalTextSide hts; 
private TextSide db; 
private Orientation or; 

public TextSide textSide 
{ 
    get 
    { 
     if (or == Orientation.Vertical) 
     { 
      [need help!!] 
     } 
     else 
     { 
      [need help!!] 
     } 
    } 
    set 
    { 
     [need help!!] 
    } 
} 

public Orientation orientation 
{ 
    get 
    { 
     return or; 
    } 
    set 
    { 
     or = value; 
    } 
} 

Где мне нужна помощь, чтобы вернуться и установить значения перечислений в зависимости от ориентации выбранной. Может, есть другой способ, может быть?

Надеюсь, это выполнимо?

Благодаря

ответ

0

Не знает, как ограничить его во время разработки - я видел во время компиляции и времени выполнения проверки.

Однако вы можете рассмотреть возможность упрощения своих перечислений путем объединения Orientation и TextSide.

Например, System.Windows.Forms.TabControl имеет свойство Alignment (перечисление TabAlignment), которое указывает Top, Bottom, Left и Right. Неявно в этом горизонтальном/вертикальном.

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

0

Проблема заключается в том, что это будет сделано все дальше и включить что-то вроде текстового направления, где вы можете иметь LeftToRight или RightToLeft, любой из которых приемлем для горизонтального управления, но не для вертикального управления, где вам может понадобиться TopToBottom или BottomToTop !!

Это единственный способ добавить свойства элемента управления через подход типа геттер/сеттер?

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

0

Я знаю, что это, вероятно, кажется немного неуклюжим, но как насчет того, чтобы не использовать Left/Right или Up/Down, а только Position1/Position2? Например, в горизонтальной настройке Position1 будет Left (по крайней мере, когда вы думаете о LeftToRight), а в вертикальной настройке Position2 будет Top (при использовании TopToBottom).

Вы также можете забыть о TopToBottom/BottomToTop или LeftToRight/RightToLeft, но просто используйте логическое выражение, называемое IsReverseOrder.

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