Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 视觉';什么虫子?(覆盖面板的问题)_C#_Visual Studio_Controls - Fatal编程技术网

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)控件(即,它被添加到表单中)之前,对行为的所有下注都是“关闭”的。