Предоставление свойств пользовательского элемента управления - PullRequest
1 голос
/ 13 июня 2009

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

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

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

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

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;
     }
 }

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

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

Спасибо

Ответы [ 3 ]

0 голосов
/ 14 июня 2009

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

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

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

0 голосов
/ 14 июня 2009

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

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

0 голосов
/ 13 июня 2009

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

Однако, возможно, вы захотите упростить перечисления путем сочетания ориентации и TextSide.

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...