次のように定義されたカスタム フォームがあります。
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
に渡されたパラメーターにアクセスできないことです。メンバーは、カスタム フォームコンストラクターの最初のステートメントの前に実行されます。フォーム コンストラクターに渡された値をフォーム フィールドにキャッシュして、後で使用することはできません。CreateParams
CreateParams
needShadow
CreateParams
この問題を解決するには、このneedShadow
パラメーターをフォームの静的プロパティに変換し、フォームの作成前に設定して、この値をオーバーライドされた で使用しますCreateParams
。しかし、私のアプリはこのフォームの複数のインスタンスをそれぞれ独自の値で作成できるため、明らかに良い方法ではありません。needShadow
WinForms .NET でこの問題をうまく解決する方法はありますか?