1

次のように定義されたカスタム フォームがあります。

internal class DropDownForm : System.Windows.Forms.Form
{
    public DropDownForm(bool needShadow)
    { ... }
}

オーバーライドされた CreateParams メンバーのフォーム コンストラクターに渡される needShadow パラメーターに応じて、フォーム シャドウを有効にする必要があります。

protected override CreateParams CreateParams
{
    get
    {
        CreateParams cp = base.CreateParams;

        if (needShadow)
            cp.ClassStyle |= CS_DROPSHADOW;

        return cp;
    }
}

問題は、このフォーム コンストラクターneedShadowに渡されたパラメーターにアクセスできないことです。メンバーは、カスタム フォームコンストラクターの最初のステートメントの前に実行されます。フォーム コンストラクターに渡された値をフォーム フィールドにキャッシュして、後で使用することはできません。CreateParamsCreateParamsneedShadowCreateParams

この問題を解決するには、このneedShadowパラメーターをフォームの静的プロパティに変換し、フォームの作成前に設定して、この値をオーバーライドされた で使用しますCreateParams。しかし、私のアプリはこのフォームの複数のインスタンスをそれぞれ独自の値で作成できるため、明らかに良い方法ではありません。needShadow

WinForms .NET でこの問題をうまく解決する方法はありますか?

4

1 に答える 1