2012-02-14 2 views
0

Я хочу, чтобы панель, унаследовавшая от базовой панели, имела фиксированный 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; 

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

+1

Что фактический цвет вы видите? – ken2k

+0

Обратный цвет родительского элемента управления, т. Е. Если родительская панель синяя, этот элемент управления также будет синим. – xsl

ответ

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

Это работает. Спасибо. Нет ли другого способа сделать это, чем повторять все свойства в конструкторе? – xsl

+0

@xsl Вы переопределяете другие свойства панели? – ken2k

+0

До сих пор только цвет переднего плана. Но в будущем может быть и больше. – xsl

1

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

BackColor=Color.Red; 

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

+0

Я хочу контролировать свойство backcolor с одного места, а не везде, где используется элемент управления. – xsl

+0

Что значит? – ispiro

+0

Все элементы управления, унаследованные от MyPanel, должны иметь фиксированный BackColor, независимо от того, где они используются, без установки свойства вручную. – xsl

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