Как мога да предотвратя промяната на 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