Как я могу предотвратить изменение BackColor элемента управления?

Я хочу, чтобы панель, унаследованная от базовой панели, имела фиксированный BackColor независимо от того, где она используется. Моя базовая панель выглядит так:

public class MyPanel
{
    public override Color BackColor
    {
        get
        {
            return base.BackColor;
        }
        set
        {
            base.BackColor = Color.Red;
        }
    }
}

BackColor не задан в файле Designer.cs примера формы:

this.sampleControl.Font = new System.Drawing.Font("Tahoma", 8.25F,
    System.Drawing.FontStyle.Regular, 
    System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.sampleControl.Location = new System.Drawing.Point(0, 0);
this.sampleControl.Margin = new System.Windows.Forms.Padding(5);
this.sampleControl.Name = "sampleControl";
this.sampleControl.Padding = new System.Windows.Forms.Padding(2, 0, 2, 2);
this.sampleControl.Size = new System.Drawing.Size(230, 100);
this.sampleControl.TabIndex = 1;

На самом деле цвет нигде не установлен, поэтому я полагаю, что он каким-то образом получает свойство из панели, на которой он размещен. Как я могу предотвратить это?


person xsl    schedule 14.02.2012    source источник
comment
Какой реальный цвет вы видите?   -  person ken2k    schedule 14.02.2012
comment
Цвет фона родительского элемента управления, т. е. если родительская панель синяя, этот элемент управления также будет синим.   -  person xsl    schedule 14.02.2012


Ответы (2)


Как насчет:

public class MyPanel : Panel
{
    private Color backColor = Color.Red;

    public MyPanel()
    {
        // Set the color once
        this.BackColor = backColor;
    }

    public override Color BackColor
    {
        get
        {
            return base.BackColor;
        }
        set
        {
            base.BackColor = backColor;
        }
    }
}
person ken2k    schedule 14.02.2012
comment
Это работает. Спасибо. Нет ли другого способа сделать это, кроме как повторить все свойства в конструкторе? - person xsl; 14.02.2012
comment
@xsl Вы переопределяете другие свойства панели? - person ken2k; 14.02.2012
comment
До сих пор только цвет переднего плана. Но в будущем может быть больше. - person xsl; 14.02.2012

Просто установите это в конструкторе MyPanel.

BackColor=Color.Red;

Вам не нужен override, если вы не хотите, чтобы другие не могли его изменить.

person ispiro    schedule 14.02.2012
comment
Я хочу управлять свойством backcolor из одного места, а не везде, где используется элемент управления. - person xsl; 14.02.2012
comment
Все элементы управления, наследуемые от MyPanel, должны иметь фиксированный BackColor, независимо от того, где они используются, без установки свойства вручную. - person xsl; 14.02.2012