C# 视觉';什么虫子?(覆盖面板的问题)
我有一个非常奇怪的问题,我想知道这是视觉上的错误还是我做错了什么。下面是覆盖面板类的简单代码:C# 视觉';什么虫子?(覆盖面板的问题),c#,visual-studio,controls,C#,Visual Studio,Controls,我有一个非常奇怪的问题,我想知道这是视觉上的错误还是我做错了什么。下面是覆盖面板类的简单代码: public class MyPanel : Panel { private TableLayoutPanel table = new TableLayoutPanel(); public MyPanel() { this.Controls.Add(table); table.BackColor
public class MyPanel : Panel
{
private TableLayoutPanel table = new TableLayoutPanel();
public MyPanel()
{
this.Controls.Add(table);
table.BackColor = Color.Green;
}
public override System.Drawing.Color BackColor
{
get
{
return table.BackColor;
}
set
{
table.BackColor = value;
}
}
}
如果我将控件放在表单上并构建项目,visual将生成错误,并且无法再次打开项目。但是,如果我将TableLayoutPanel更改为TextBox,它可以正常工作。此外,如果在将控件添加到控件集合之前在构造函数中设置BackColor,它也可以正常工作。
有什么问题?还是仅仅是一个bug?我怀疑递归可能是一个问题;默认情况下(如果未明确设置),控件将从父控件继承颜色。这导致了这样一种情况:孩子的颜色(如果没有设置)会询问家长,家长会询问孩子(永远) 但是,如果没有明确的颜色集,TextBox会覆盖此行为以返回
SystemColor.Window
。因此没有递归
无论如何,我不确定这是否是一个好主意-如果您不小心,设计师可能会开始复制控件。我必须补充一点,我检查了属性BackColor的get是否在完成MyPanel的构造后使用。实际上,您是对的。谢谢我花了很长时间来解决这个问题。你有没有试过table.BackColor?请注意,在您实际生成真实(Win32)控件(即,它被添加到表单中)之前,对行为的所有下注都是“关闭”的。