3

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

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

请注意,我尝试调用 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 one 中......我也使用了 Invalidate() 正如我在第一篇文章中所说的那样,但这并不能解决我的问题。

4

3 回答 3

4

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

不过还是谢谢大家:)

于 2008-11-25T16:22:06.233 回答
2

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

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

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

于 2008-11-25T05:22:58.763 回答
0

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

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

顺便说一句...在属性正文中,您应该调用this.Invalidate()以刷新绘画。

希望有帮助!

于 2008-11-25T13:31:06.313 回答