studio - Pregunta ¿Cómo invalidar/actualizar el diseñador VS IDE para C#?
reducir sangria visual studio code (3)
Tengo CustomForm heredado de Form que implementa una propiedad booleana llamada Prop . Los formularios que usaré heredarán de CustomForm . Esta propiedad hará algunos retoques y cambios (si está habilitado) en el formulario. Sin embargo, esto no funciona como debería, el VS IDE diseñado no se actualiza para mostrar los cambios. Pero si presiono Ctrl + Shift + B (Menú: Build »Build Solution) el VS IDE se actualizará, el diseñador de formularios incluso desaparecerá por una fracción de segundo y se volverá a dibujar con los nuevos cambios aplicados.
Entonces, ¿hay alguna manera, por código, de obligar al diseñador VS IDE a actualizarse tal como ocurre cuando construyo la solución? Si es así, podría agregar ese código al accesorio de configuración Prop y mi problema desapareció.
Tenga en cuenta que he intentado llamar a Invalidate (), Actualizar () y Actualizar. Pero ninguno de ellos pareció solucionar el problema ...
Aquí hay una pequeña idea de mi problema real. Mi código es algo como esto:
internal class MyForm : Form {
private FormBorderStyle formBorderStyle;
private bool enableSkin;
[DefaultValue(false)]
public bool EnableSkin {
get {
return enableSkin;
} set {
enableSkin = value;
if(enableSkin) {
BackColor = Color.Lime;
MaximizedBounds = Screen.GetWorkingArea(this);
TransparencyKey = Color.Lime;
base.FormBorderStyle = FormBorderStyle.None;
} else {
BackColor = SystemColors.Control;
MaximizedBounds = Rectangle.Empty;
TransparencyKey = Color.Empty;
base.FormBorderStyle = FormBorderStyle;
}
}
}
[DefaultValue(FormBorderStyle.Sizable)]
public new FormBorderStyle FormBorderStyle {
get {
return formBorderStyle;
} set {
formBorderStyle = value;
if(EnableSkin) {
base.FormBorderStyle = FormBorderStyle.None;
} else {
base.FormBorderStyle = formBorderStyle;
}
}
}
internal MyForm() {
EnableSkin = false;
FormBorderStyle = FormBorderStyle.Sizable;
}
}
Y el problema que estoy teniendo es algo como esto: http://blogs.msdn.com/calvin_hsia/archive/2007/05/01/windows-vista-aero-borderstyle-paint-problem-as-non-administrator. aspx
En mi caso, eso sucede cuando configura EnableSkin en True, lo cambia de nuevo a False y luego, al cambiar el FormBorderStyle se genera el problema que se puede ver en el enlace de arriba. Como se indica en el artículo, el problema no ocurre cuando se ejecuta VS como administrador.
Es por eso que estoy buscando una manera de actualizar el diseñador VS IDE. En otras palabras, ahora que encontré ese artículo, necesito recrear la ventana tal como sucede cuando se reconstruye la solución.
¿Cómo declaro una propiedad en la forma base?
Actualmente tengo:
public class MyForm : Form { }
Y solo puedo declarar propiedades dentro de esa clase, no dentro del Formulario uno ... También he usado Invalidate () como dije en la primera publicación, pero no soluciona mi problema.
Alguien más me ayudó y solucionó el problema. Acabo de llamar a ReCreateHandle () cuando el usuario establece EnableSkin en falso. Problema resuelto :)
Gracias a todos, aunque :)
Hasta donde yo sé, las rutinas de pintura no se reflejan en el IDE si está mostrando el objeto que hace la pintura. Por ejemplo, si su forma base hace algo de pintura, la heredada muestra que ... pero si abre la forma base, no muestra el resultado de la pintura.
Creo que si necesita ver el resultado de cambiar la propiedad en sus formularios secundarios, la propiedad debe declararse en forma base y realizar la pintura en esa forma.
Por cierto ... en el cuerpo de la propiedad debe llamar this.Invalidate()
para refrescar la pintura.
¡Espero que ayude!
Todo lo que necesita hacer es agregar este atributo a su propiedad:
[Description("Description of your property."), NotifyParentProperty(true),
RefreshProperties(RefreshProperties.Repaint)]
Eso causará que el IDE vuelva a pintar cuando se cambie el valor.