Pregunta

Tengo un componente Windows.Forms que tiene un "mySize" Propiedad que devuelve una estructura de tamaño. Mi intención era que esta propiedad calcule el mySize devuelto automáticamente en función del tamaño del componente, a menos que mySize se haya establecido explícitamente, en cuyo caso, se devolverá el valor establecido de mySize. Desafortunadamente, ahora que estoy incorporando el componente en un formulario, el diseñador de Windows Forms ha decidido comenzar a generar y establecer explícitamente un valor para la propiedad mySize, que me está fastidiando.

Así que necesito establecer un Valor predeterminado, para que el Diseñador se vaya y me deje solo.

He leído las respuestas relacionadas con System.ComponentModel.DefaultValue, por lo que sé que debo establecer manualmente el valor de la propiedad en el constructor, pero las respuestas y la documentación que he encontrado solo tratan de establecer un DefaultValue de Falso, una constante.

Una estructura de tamaño no es una constante y, por lo tanto, el compilador de VB se está volviendo loco, diciéndome que no puedo establecer un tamaño como valor predeterminado para la propiedad de tamaño de tipo porque los tamaños no son constantes.

Esto hace que me duela el cerebro.

Probablemente pueda codificar el problema haciendo los métodos getMySize y setMySize en lugar de usar una propiedad, pero me gustaría saber si realmente hay alguna forma de establecer la propiedad predeterminada para un Tamaño.

NB: no estoy usando mySize como una especie de intento desordenado para anular la propiedad Size (que tiene un valor predeterminado de 150x150, por lo que ALGO parece ser capaz de establecer valores predeterminados para los tamaños); mySize es solo un valor de Tamaño requerido por la Clase.

¿Fue útil?

Solución

En lugar de aplicar el atributo DefaultValue, escriba los dos métodos siguientes:

bool ShouldSerializemySize() { ... }
void ResetmySize() { ... }

En ShouldSerializemySize, devuelve true si el valor debe ser serializado al código. En ResetmySize, restablezca la propiedad a su valor predeterminado.

El diseñador de componentes seleccionará automáticamente estos métodos mediante reflexión.

Más información aquí: http://msdn.microsoft.com/en-us/ library / 53b8022e (VS.71) .aspx

Otros consejos

He notado que en realidad hay un ejemplo específico dado para establecer un Valor predeterminado de Tamaño de tipo en la sección Contenido de la comunidad de Página de MSDN de DefaultValue , que sugiere usar el constructor DefaultValue descrito en esta página .

Desafortunadamente, aunque el ejemplo dado es correcto, en el sentido de que funciona, me parece que la documentación de MSDN no llevaría a nadie a esta respuesta.

Voy a establecer la respuesta de albahari como la respuesta a esta pregunta (porque su respuesta al menos tiene algún tipo de sentido) y dejar este ejemplo aquí por completo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top