我有一个继承自Form的CustomForm,实现了一个名为Prop的布尔属性。我将使用的表单都将继承自CustomForm。如果启用此属性,它将对表单进行一些绘制和更改。然而,这个功能没有按照预期工作,VS IDE设计器没有刷新以显示更改。但是,如果我按下Ctrl+Shift+B(菜单:Build » Build Solution),则VS IDE将刷新,甚至表单设计器会在瞬间消失并重新绘制自己以应用新的更改。
那么,有没有办法通过代码强制VS IDE设计器刷新,就像我构建解决方案时发生的那样?如果可以的话,我可以将该代码添加到Prop set访问器中,我的问题就解决了。
请注意,我尝试调用Invalidate()、Refresh()和Update。但是,它们似乎都无法解决问题...
以下是我真正问题的一些见解:
我遇到的问题类似于这样:http://blogs.msdn.com/calvin_hsia/archive/2007/05/01/windows-vista-aero-borderstyle-paint-problem-as-non-administrator.aspx。如果将EnableSkin设置为True,然后将其改回False,再更改FormBorderStyle,就会出现上述链接中的问题。正如文章中所述,当以管理员身份运行VS时,该问题不会发生。
这就是为什么我正在寻找一种刷新VS IDE设计器的方法。换句话说,既然我已经找到了那篇文章,我需要像重新构建解决方案时那样重新创建窗口。
如何在基本表单中声明属性?
我目前有:
那么,有没有办法通过代码强制VS IDE设计器刷新,就像我构建解决方案时发生的那样?如果可以的话,我可以将该代码添加到Prop set访问器中,我的问题就解决了。
请注意,我尝试调用Invalidate()、Refresh()和Update。但是,它们似乎都无法解决问题...
以下是我真正问题的一些见解:
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;
}
}
我遇到的问题类似于这样:http://blogs.msdn.com/calvin_hsia/archive/2007/05/01/windows-vista-aero-borderstyle-paint-problem-as-non-administrator.aspx。如果将EnableSkin设置为True,然后将其改回False,再更改FormBorderStyle,就会出现上述链接中的问题。正如文章中所述,当以管理员身份运行VS时,该问题不会发生。
这就是为什么我正在寻找一种刷新VS IDE设计器的方法。换句话说,既然我已经找到了那篇文章,我需要像重新构建解决方案时那样重新创建窗口。
如何在基本表单中声明属性?
我目前有:
public class MyForm : Form { }
我只能在这个类中声明属性,而不能在Form类中声明... 我也使用了Invalidate(),但它并没有解决我的问题。