Lo que funcionó para mí para las propiedades que no pueden anular está usando el operador new
. Por ejemplo, la propiedad MultiSelect
en un control ListView
. Quiero MultiSelect
por defecto a false
, pero aún quiero poder cambiarlo.
Si tan sólo puse a false
en el constructor, o en InitializeComponent
, el problema (creo) es que el valor por defecto es todavía true
, por lo que si fijo el valor de true
en el diseñador, los avisos de diseño que true
es el valor predeterminado, por lo que simplemente no establece la propiedad en absoluto en lugar de establecerla explícitamente en lo que cree que ya es la predeterminada. Pero luego el valor termina siendo false
en su lugar, porque eso es lo que se establece en el constructor.
Para solucionar este problema he usado el siguiente código:
/// <summary>Custom ListView.</summary>
public sealed partial class DetailsListView : ListView
{
...
[DefaultValue(false)]
public new bool MultiSelect {
get { return base.MultiSelect; }
set { base.MultiSelect = value; }
}
Esto permite que el control todavía tienen un MultiSelect
propiedad funcional que por defecto es false
en lugar de true
, y la propiedad todavía se pueden activar en el nuevo control.
EDIT: encontré un problema que tenía que ver con el uso de formularios abstractos. He estado usando clases de formularios abstractos, con una implementación concreta a la que cambio cuando necesito usar el diseñador. Descubrí que cuando cambiaba la clase que heredaba, las propiedades de mi control personalizado se restablecían a los valores predeterminados anteriores. Parece que he corregido este comportamiento estableciendo propiedades en sus valores predeterminados en el constructor del control personalizado.
¿Podría dar un ejemplo de cómo aplicar eso a las propiedades de la clase base? –
Disculpas: es '[DefaultValue (someValue)]'. Aquí hay un enlace a MSDN con el ejemplo: http://msdn.microsoft.com/en-us/library/system.componentmodel.defaultvalueattribute%28v=vs.90%29.aspx – Bridge
Creo que el atributo DefaultValue es lo que necesitar. El IDE de Visual Studio colocará el valor predeterminado especificado en el atributo en el archivo de Designer. Si el usuario cambiará el valor predeterminado a algún otro valor, Visual Studio IDE actualizará el archivo Designer con un nuevo valor. Esto evitará volver a cargar el valor anterior cuando se vuelva a abrir el control ya que el valor predeterminado ya se ha sobrescrito. – jags