Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
问题:如何使C#的VS IDE设计器无效/刷新?_C#_Visual Studio 2008_Ide_Refresh_Designer - Fatal编程技术网

问题:如何使C#的VS IDE设计器无效/刷新?

问题:如何使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设计器刷新自己,就像我构建解决方案时一样?如果是这样,我可以将该

我有自定义表单继承自表单,它实现了一个名为Prop的布尔属性。我将使用的表单将继承自CustomForm。此属性将对窗体进行一些绘制和更改(如果已启用)。然而,这并没有像它应该的那样工作,VSIDE没有被刷新以显示更改。但是如果我按Ctrl+Shift+B(菜单:Build»Build Solution),VS IDE将刷新,表单设计器甚至会在一瞬间消失,并使用应用的新更改重新绘制自身

那么,有没有一种方法可以通过代码强制VSIDE设计器刷新自己,就像我构建解决方案时一样?如果是这样,我可以将该代码添加到Propset访问器中,我的问题就消失了

注意,我试图调用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;
    }
}
我遇到的问题是这样的:

在我的例子中,当您将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)]根本不起作用,即使是一个简单的引用