Ошибка в Visual Studio или просто плохая идея? - PullRequest
0 голосов
/ 11 июля 2009

Я сделал пользовательский элемент управления, который в основном является многострочным TextBox, который позволяет вводить данные, и некоторые другие элементы управления на стороне, которые сообщают некоторую информацию. Теперь я хотел позволить пользователю моего элемента управления изменить шрифт в TextBox и подумал что-то вроде: «Ну, у пользователя не должно быть возможности изменять шрифт других элементов управления, поэтому я» я свяжу его через свойство Font в элементе управления "и, следовательно, получу следующий код:

public override Font Font {
    get { return txtEntry.Font; }
    set { txtEntry.Font = value; }
}

(Да, венгерская запись на моем контроле ... Старые привычки VB умирают ...)

Теперь это будет выглядеть нормально, за исключением того, что, когда я собрал свой проект и вернулся в форму, чтобы увидеть эффект, Visual Studio потерпела крах. И надежно рухнул при повторном запуске проекта ... Я открыл класс в Блокноте и изменил его на другое имя, удалил выходные папки и открыл Visual Studio, перестроил, и теперь все работает нормально.

У меня такой вопрос: есть ли в моей идее какой-то недостаток в дизайне или это просто ошибка VS?

1 Ответ

8 голосов
/ 11 июля 2009

Шрифт является окружающим свойством. Это означает, что, если он не установлен, элемент управления просматривает свойство родителя, чтобы получить его значение. Итак, у вас есть рекурсивная функция, потому что родительское свойство Font смотрит на дочернее, и вокруг мы идем.

Элементы управления Windows формы используют свойства окружения, поэтому дочерние элементы управления могут выглядеть как их окружение. В этом контексте «ambient» означает, что свойство по умолчанию извлекается из родительского элемента управления. Если у элемента управления нет родителя, а свойство не задано, элемент управления пытается определить значение свойства окружения через свойство Site.

Если элемент управления не размещен, если сайт не поддерживает свойства окружения или если свойство не задано для объекта AmbientProperties, элемент управления использует свои собственные значения по умолчанию. Обычно свойство окружения представляет собой характеристику элемента управления, такого как BackColor, который передается дочернему элементу управления. Например, по умолчанию кнопка будет иметь тот же BackColor, что и ее родительская форма.

Кстати, не плохо себя чувствую; Я задал один и тот же вопрос один раз: -)

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