AttributeCollection attributes = TypeDescriptor.GetProperties(checkBox1)["BackColor"].Attributes;
DefaultValueAttribute myAttribute =
(DefaultValueAttribute)attributes[typeof(DefaultValueAttribute)];
Свойства элемента управления
Если же вручную установить такое же значение свойства, как и по умолчанию, шрифт всё равно остается жирным. В общем-то никакой проблемы в этом как бы и не возникало. До текущего момента.
Приходится использовать данный элемент управления в проекте, где отключены стили WinXP (т.е. нет вызова Application.EnableVisualStyles() ). При этом наблюдается такая картина:
Если свойство установлено по умолчанию (обычный шрифт) - то элемент рисуется белым.
Если свойство установлено вручную, но с тем же значением, что и по умолчанию (жирный шрифт) - элемент рисуется серым.
Отсюда вытекает вопрос: почему такое происходит, что при одинаковых (в панели свойств) значениях свойства элемент отображается по разному? Хотя среда и выделяет это шрифтом. Как выявить программно, используется ли свойство по умолчанию, или же оно только соответствует по значению тому, что должно быть по умолчанию, но задано принудительно?
А если программно объявить явные значения нужных свойств при инициализации объекта, сработает? Я просто с таким не сталкивался. Кстати, какой фреймворк?
Цитата: Sanila_san
А если программно объявить явные значения нужных свойств при инициализации объекта, сработает? Я просто с таким не сталкивался. Кстати, какой фреймворк?
Если программно присвоить, то аналогично ручному выбору. А можно программно сбросить в значение по умолчанию? Т.е. выполнить то, что происходит по "Reset" из контекстного меню свойства. Или хотя бы получить это значение? .Net 3.5
DefaultValueAttribute. Можно его получить (пример кода там есть), и сравнить с текущим; если надо - изменить программно.
Насчёт ручного задания свойств. Я тоже замечал, что не всегда шрифт становится нормальным, не жирным, после возврата значение в окне свойств к дефолтному. Почему-то среда иногда глючит. Устранить это можно, удалив строку с заданием этого свойства у компонента в файле *.Designer.cs.
Значение свойства по умолчанию задаётся аттрибутом
Насчёт ручного задания свойств. Я тоже замечал, что не всегда шрифт становится нормальным, не жирным, после возврата значение в окне свойств к дефолтному. Почему-то среда иногда глючит. Устранить это можно, удалив строку с заданием этого свойства у компонента в файле *.Designer.cs.
Цитата: koodeer
Значение свойства по умолчанию задаётся аттрибутом DefaultValueAttribute. Можно его получить (пример кода там есть), и сравнить с текущим; если надо - изменить программно.
Получилось, что для свойства BackColor значения по умолчанию нет.
Код:
myAttribute устанавливается в null. Интересно, кто же тогда его задает и где?
BackColor если не задано вручную, то имеет то же значение, что у родительского контрола.
Сравниваю checkBox1.BackColor и CheckBox.DefaultBackColor - значения одинаковые.
При этом checkBox (рисуется в режиме кнопки) отображается белым цветом в целевом приложении. Задаю принудительное присваивание, т.е. checkBox1.BackColor = CheckBox.DefaultBackColor; и в результате вижу серый цвет :)
Похоже, что при установке свойства BackColor происходит еще что-то помимо присваивания значения цвета.
насмотрелась я этих чудес в vs2008, когда целый ряд контроллов, не хочу вспоминать каких именно, при обращении к их именам выдавал мне пустые строки, ту бишь "", вместо тех имен, которые были прописаны в Properties. пришлось присваивать эти имена в ручную.
Цитата: Оlga
насмотрелась я этих чудес в vs2008, когда целый ряд контроллов, не хочу вспоминать каких именно, при обращении к их именам выдавал мне пустые строки, ту бишь "", вместо тех имен, которые были прописаны в Properties. пришлось присваивать эти имена в ручную.
Всё таки разные значения свойств при одинаковом поведении и одинаковые значения свойств и разное поведение - не одно и то же :) Стало быть ждем следующую VS или патч. А пока придется задавать принудительно ручками.