视觉错误? (覆盖面板有问题)

时间:2009-02-03 09:30:38

标签: c# visual-studio controls

我有一个非常奇怪的问题,我想知道这是一个视觉错误还是我做错了什么。这是一个覆盖Panel类的简单代码:

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,它可以正常工作。此外,如果我在将控件添加到Controls集合之前在构造函数中设置BackColor,它也可以正常工作。 问题是什么?还是只是一个错误?

1 个答案:

答案 0 :(得分:0)

我怀疑递归可能是个问题;默认情况下(如果未明确设置)控件从父级继承颜色。这导致了孩子的颜色(如果没有设置)要求父母询问孩子(永远)的情况。

但是,如果没有明确的颜色集,

TextBox会覆盖此行为以返回SystemColors.Window。因此没有递归。

无论哪种方式,我都不确定这是个好主意 - 如果你不小心,设计师可能会开始重复控制。