Ошибка в Visual? (проблема с переопределенной панелью) - PullRequest
1 голос
/ 03 февраля 2009

У меня действительно странная проблема, и мне интересно, если это ошибка визуала или я делаю что-то не так. Вот простой код переопределенного класса 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, он работает нормально. Кроме того, если я установил BackColor в конструкторе до добавления элемента управления в коллекцию Controls, он также работает нормально. В чем проблема? или это просто ошибка?

1 Ответ

0 голосов
/ 03 февраля 2009

Я подозреваю, что рекурсия может быть проблемой; по умолчанию (если не установлено явно) элемент управления наследует цвет от родителя. Это приводит к сценарию, в котором цвет дочернего элемента (если не установлен) запрашивает родительский элемент, который запрашивает дочернего элемента (навсегда).

TextBox, однако, переопределяет это поведение и возвращает SystemColors.Window, если нет явного набора цветов. Следовательно, нет рекурсии.

В любом случае, я не уверен, что это хорошая идея - дизайнер может начать дублировать элементы управления, если вы не будете осторожны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...