3

Propという名前のブール値プロパティを実装するFormからCustomFormを継承しています。使用するフォームは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 { }

そして、フォーム内ではなく、そのクラス内でのみプロパティを宣言できます...最初の投稿で述べたように、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 に答える