2012-02-14 38 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 2012-02-14 16:48:17

+0

父控件的背景色,即如果父面板是蓝色,则此控件也将为蓝色。 – xsl 2012-02-14 16:49:49

回答

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 2012-02-14 17:00:53

+0

@xsl您是否覆盖面板的其他属性? – ken2k 2012-02-14 17:03:42

+0

到目前为止只有前景色。但未来可能会有更多。 – xsl 2012-02-14 18:10:25

1

只需在MyPanel构造函数中设置即可。

BackColor=Color.Red; 

,除非你想防止他人更改它,您不需要override

+0

我想从一个地方控制backcolor属性,而不是到处使用控件。 – xsl 2012-02-14 16:53:22

+0

你是什么意思? – ispiro 2012-02-14 16:54:43

+0

从MyPanel继承的所有控件都应该有一个固定的BackColor,无论它们在哪里使用,都不需要手动设置属性。 – xsl 2012-02-14 16:56:51