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

时间:2008-11-25 02:35:25

标签: c# visual-studio-2008 ide refresh designer

我从表单继承了 CustomForm ,它实现了名为 Prop 的布尔属性。我将使用的表单将继承自 CustomForm 。此属性将对表单进行一些绘制和更改(如果已启用)。但是,这不应该正常工作,VS IDE设计的不是刷新以显示更改。但是如果我按下Ctrl + Shift + B(菜单:构建»构建解决方案),VS IDE将刷新,表单设计器甚至会在一瞬间消失,并会在应用新更改后重绘自己。

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

请注意,我尝试调用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 1中声明...我也使用了Invalidate(),就像我在第一篇文章中所说的那样,但它并没有解决我的问题。

3 个答案:

答案 0 :(得分:4)

其他人帮我解决了问题。当用户将 EnableSkin 设置为false时,我只需调用 ReCreateHandle()。问题解决了:))

感谢大家:)

答案 1 :(得分:2)

您需要做的就是将此属性添加到您的媒体资源中:

 [Description("Description of your property."), NotifyParentProperty(true),
 RefreshProperties(RefreshProperties.Repaint)]

这将导致IDE在值更改时重新绘制。

答案 2 :(得分:0)

据我所知,如果要显示绘画的对象,绘画例程不会反映在IDE中。例如,如果您的基础表单执行了一些绘制,则继承显示...但是如果您打开基本表单,则它不会显示绘制结果。

我认为如果您需要查看更改子表单属性的结果,则应该以基本形式声明属性,并以该表单进行绘制。

顺便说一句......在财产正文中你应该调用this.Invalidate()来刷新这幅画。

希望有所帮助!