11

.netには、継承されたコントロールがあります。

public CustomComboBox : ComboBox

DropDownStyleプロパティのデフォルト値を、基本クラス(ComboBoxStyle.DropDown)で指定されたデフォルト値以外の別の値(ComboBoxStyle.DropDownList)に変更したいだけです。

コンストラクターを追加するだけでよいと思うかもしれません。

public CustomComboBox()
{
     this.DropDownStyle = ComboBoxStyle.DropDownList;
}

ただし、このアプローチではVisualStudioDesignerが混乱します。Visual Studioでカスタムコントロールを設計するときに、DropDownStyleにComboBoxStyle.DropDownを選択すると、選択したプロパティが(基本ComboBoxクラスの[DevaultValue()]からの)デフォルト値であると見なされるため、そうではありません。 customComboBox.DropDownStyle=ComboBoxStyle.DropDown行をDesigner.csファイルに追加します。そして、紛らわしいことに、一度実行すると画面が意図したとおりに動作しないことがわかります。

DropDownStyleプロパティは仮想ではないため、オーバーライドすることはできませんが、次のことはできます。

[DefaultValue(typeof(ComboBoxStyle), "DropDownList")]
public new ComboBoxStyle DropDownStyle
{
      set { base.DropDownStyle = value; }
      get { return base.DropDownStyle; }
}

しかし、そうすると、「新しい」宣言を使用する際のニュアンスから問題が発生します。私はそれを試しましたが、ビジュアルスタジオのデザイナーがこのアプローチからも混乱し、ComboBoxStyle.DropDown(基本クラスのデフォルト)を強制するため、正しく機能しないようです。

これを行う他の方法はありますか?冗長な質問で申し訳ありませんが、詳細に説明するのは難しいです。

4

1 に答える 1

10

これはうまくいくようです:

public class CustomComboBox : ComboBox
{
    public CustomComboBox()
    {
        base.DropDownStyle = ComboBoxStyle.DropDownList;
    }

    [DefaultValue(ComboBoxStyle.DropDownList)]
    public new ComboBoxStyle DropDownStyle
    {
        set { base.DropDownStyle = value; Invalidate(); }
        get { return base.DropDownStyle;}
    }
}
于 2008-10-02T18:01:22.937 に答える