Как можно предотвратить использование значений по умолчанию в переопределенных элементах управления WinForm? - PullRequest
3 голосов
/ 12 марта 2009

Я пытаюсь понять и понять, что и как делает C #. Я исторически являюсь разработчиком Visual Foxpro (VFP) и несколько избалован годами визуального наследования, создавая собственный базовый уровень пользовательских элементов управления для использования в приложениях.

Пытаясь изучить параллели в C #, я застрял на чем-то. Скажем, я получил свой собственный элемент управления меткой (элемент управления является подклассом метки), определенный с помощью шрифта «Arial», 10 баллов. Затем в любой форме, к которой я ее добавлю, Designer автоматически предварительно заполнит некоторые значения свойств, которые можно увидеть в части «Designer.cs» класса Form.

this.LabelHdr2.AutoSize = true;
this.LabelHdr2.Font = new System.Drawing.Font("Arial", 14F, System.Drawing.FontStyle.Bold);
this.LabelHdr2.ForeColor = System.Drawing.Color.Blue;
this.LabelHdr2.Location = new System.Drawing.Point(150, 65);
this.LabelHdr2.Name = "LabelHdr2";
this.LabelHdr2.Size = new System.Drawing.Size(158, 22);
this.LabelHdr2.TabIndex = 5;
this.LabelHdr2.Text = "LabelHdr2";

Я хочу предотвратить создание таких вещей, как Шрифт, Цвет, Размер, Авторазмер каждый раз, когда элемент управления помещается в форму. Если позже я решу изменить шрифт с «Arial» 10 на «Tahoma» 11, мне придется вернуться ко всем формам (и любым другим настраиваемым элементам управления) и отредактировать их для изменения.

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

В C # я должен вернуться и изменить каждую форму, чтобы она распознавалась новыми / обновленными значениями класса ...

Есть ли разумный способ избежать этого?

Ответы [ 3 ]

4 голосов
/ 12 марта 2009

Вместо использования «ReadOnlyAttribute», попробуйте вместо него использовать « DefaultValueAttribute ». Если я правильно помню, дизайнер не должен создавать код для установки свойства, если текущее значение соответствует значению, сохраненному в «DefaultValueAttribute».

3 голосов
/ 12 марта 2009

Вот простое решение с использованием ReadOnlyAttribute в производном классе.

class MyLabel : Label
{
    [ReadOnly(true)]
    public override Font Font
    {
        get { return new Font(FontFamily.GenericMonospace, 10); }
        set { /* do nothing */ }
    }
}

ReadOnlyAttribute отключит редактирование свойств в конструкторе VS.NET.

1 голос
/ 12 марта 2009

Попробуйте добавить атрибут ReadOnly к свойствам ваших производных классов:

[ReadOnly(true)]
public override Font Font
{
    get{ // Your Implementation Here }
    set{ // Don't really care,do you? }
}

Атрибут ReadOnlyAttribute должен обеспечивать поведение ReadOnly во время разработки.

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