问题:如何使C#的VS IDE设计器无效/刷新?
我有自定义表单继承自表单,它实现了一个名为Prop的布尔属性。我将使用的表单将继承自CustomForm。此属性将对窗体进行一些绘制和更改(如果已启用)。然而,这并没有像它应该的那样工作,VSIDE没有被刷新以显示更改。但是如果我按Ctrl+Shift+B(菜单:Build»Build Solution),VS IDE将刷新,表单设计器甚至会在一瞬间消失,并使用应用的新更改重新绘制自身 那么,有没有一种方法可以通过代码强制VSIDE设计器刷新自己,就像我构建解决方案时一样?如果是这样,我可以将该代码添加到Propset访问器中,我的问题就消失了 注意,我试图调用Invalidate()、Refresh()和Update。但他们似乎都没有解决这个问题问题:如何使C#的VS IDE设计器无效/刷新?,c#,visual-studio-2008,ide,refresh,designer,C#,Visual Studio 2008,Ide,Refresh,Designer,我有自定义表单继承自表单,它实现了一个名为Prop的布尔属性。我将使用的表单将继承自CustomForm。此属性将对窗体进行一些绘制和更改(如果已启用)。然而,这并没有像它应该的那样工作,VSIDE没有被刷新以显示更改。但是如果我按Ctrl+Shift+B(菜单:Build»Build Solution),VS IDE将刷新,表单设计器甚至会在一瞬间消失,并使用应用的新更改重新绘制自身 那么,有没有一种方法可以通过代码强制VSIDE设计器刷新自己,就像我构建解决方案时一样?如果是这样,我可以将该
这里有一些关于我真正问题的见解。我的代码是这样的:
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;
}
}
我遇到的问题是这样的:
在我的例子中,当您将EnableSkin设置为True,将其更改回False,然后更改FormBorderStyle将导致您可以在上面的链接上看到的问题时,就会发生这种情况。正如本文所述,当以管理员身份运行VS时,问题不会发生
这就是为什么我在寻找刷新VSIDE设计器的方法。换句话说,现在我已经找到了那篇文章,我需要重新创建窗口,就像重新构建解决方案时一样
如何在基本表单中声明属性 我目前有:
public class MyForm : Form { }
我只能在那个类中声明属性,而不能在Form one中声明属性。。。正如我在第一篇文章中所说,我也使用了Invalidate(),但它并不能解决我的问题。您需要做的就是将此属性添加到您的属性中:
[Description("Description of your property."), NotifyParentProperty(true),
RefreshProperties(RefreshProperties.Repaint)]
这将导致IDE在值更改时重新绘制。据我所知,如果显示进行绘制的对象,则绘制例程不会反映在IDE中。例如,如果你的基础形式做一些绘画,继承的显示。。。但是如果打开基础窗体,它不会显示绘制结果 我认为,如果您需要查看在子窗体上更改属性的结果,那么应该以基本窗体声明属性,并以该窗体进行绘制 顺便说一下。。。在属性体中,您应该调用
this.Invalidate()
,以刷新绘图
希望有帮助 有人帮我解决了问题。当用户将EnableSkin设置为false时,我只调用ReCreateHandle()。问题已解决:)
不过,谢谢大家:)从MSDN文档中可以看出,该属性并没有达到我想要的效果:“指示当关联的属性值更改时,属性网格应该刷新。”它将刷新属性网格,而不是IDE设计器。它也适用于我,但是[Description(“属性的描述”)、NotifyParentProperty(true),RefreshProperties(RefreshProperties.Repaint)]根本不起作用,即使是一个简单的引用