Как узнать, является ли свойство WinForms Control
значением по умолчанию?
Примечание : во время разработки вы можете указатьчто свойство больше не является «по умолчанию», когда оно становится жирным шрифтом .
Вот пример (во время разработки) шрифта метки, который является значением «по умолчанию» (что означает, что он получает свое значение от своего родителя):
(и если родительский шрифт изменяется, шрифт этого ярлыка изменяется)
Здесь шрифт ярлыка был изменен, больше не является значением по умолчанию:
(если родительский шрифт изменяется, шрифт этой метки не меняется)
Внимательный наблюдатель заметит, что эти две метки на одной панели являются " одинаковым шрифтом";кроме одного по умолчанию , а другого не .
Примечание : мне нужно знать в время выполнения если свойство не является значением по умолчанию.(Кто-то может обмануть и сказать: « Посмотрите на окно свойств. Если свойство выделено жирным шрифтом, вы знаете, что оно больше не является значением по умолчанию ».)
Примечание :Обратите внимание, мой вопрос не ограничен шрифтами надписей - это только пример, который я использовал.Примеры других свойств, которые я мог бы узнать, если они все еще по умолчанию:
ForeColor
BackColor
ToolStrip.ImageScalingSize
SplitContainer.FixedPanel
Мое погружение в попытки безумия
Я просто оставлю здесь эти неудачные попытки случайного бессвязного рвотного кода:
internal static Boolean GetIsPropertyDefault(object o, string propertyName)
{
return false;
/* Debug.WriteLine(String.Format("GetIsPropertyDefault: {0}.{1} = {2}", o, propertyName, TypeDescriptor.GetProperties(o)[propertyName].GetValue(o)));
// Gets the attributes for the property.
AttributeCollection attributes = TypeDescriptor.GetProperties(o)[propertyName].Attributes;
DefaultValueAttribute myAttribute = (DefaultValueAttribute)attributes[typeof(DefaultValueAttribute)];
Debug.WriteLine(String.Format("The default value is: {0}", myAttribute));
if (myAttribute == null)
return true;
return (TypeDescriptor.GetProperties(o)[propertyName].GetValue(o) == myAttribute.Value);
*/
// return (myAttribute.Value == null);
// Console.WriteLine("The default value is: " + myAttribute.Value.ToString());
/* System.Reflection.PropertyInfo pi;
try
{
//pi = o.GetType().GetProperty(propertyName).GetCustomAttributes(typeof(DefaultAttribute), false).
}
catch
{
return true;
}
if (pi == null)
return true;
System.Diagnostics.Trace.TraceInformation(pi.Attributes.ToString());
*/
// return false;
/* foreach (Attribute attr in pi.Attributes)
{
if (attr is System.ComponentModel.DefaultValueAttribute)
{
System.ComponentModel.DefaultValueAttribute dv = (System.ComponentModel.DefaultValueAttribute)attr;
}
}
*/
}