我编写了一个继承 Control 类的控件。代码喜欢
class MyControl : Control {
private SolidBrush foreColor = new SolidBrush();
public override Color ForeColor {
get { return foreColor.Color; }
set { foreColor.Color = value; }
}
}
它看起来不错,但是当我在设计模式下分配前景色时,它总是在运行时显示默认颜色。知道吗?
已编辑
我对类似的问题感到困惑,并发现设计模式不会在自动生成的代码中生成Property = Value
。请检查FormName.Designer.cs
中自动生成的代码。
如果您和我有同样的情况,请尝试
set
{
foreColor.Color = value;
base.ForeColor = value;
}
你正在混淆画笔和颜色。
这将按预期工作:
class MyControl : Control
{
private Color foreColor = SystemColors.ControlText;
public override Color ForeColor
{
get { return foreColor; }
set { foreColor = value; }
}
}
请注意,这样的Control
不会显示太多,特别是没有Text
,因此您可能希望使用 Label
或任何其他具有可见 Text
属性的控件来测试它:class MyLabel : Label
或者,当然不是通过设置ForeColor
而是设置BackColor
..
只要您不想使用私有文件来设置默认颜色,使用自动属性语法就可以了,因为生成的字段将无法访问!(出于明显的原因,它不会使用您声明的那个。
class MyLabel : Label
{
public override Color ForeColor { get; set; }
}
还要确保在设计器中取消选择控件以查看您设置的颜色!
更新我你真的想包含Control
设置ForeColor
是没有意义的,除非你帮助 ypur 类显示Text
,因为Control
是众多不显示其Text
属性的控件之一,如Panel
PictureBox
等。
下面是一个示例:
class MyControl0 : Control
{
private SolidBrush foreColor = new SolidBrush(SystemColors.ControlText);
public override Color ForeColor
{
get { return foreColor.Color; }
set { foreColor.Color = value; }
}
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
TextFormatFlags flags = TextFormatFlags.HorizontalCenter |
TextFormatFlags.VerticalCenter ;
TextRenderer.DrawText(e.Graphics, Text, Font, ClientRectangle,
ForeColor, flags);
}
}