質問

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

public CustomComboBox : ComboBox

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

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

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

ただし、このアプローチはVisual Studio Designerを混乱させます。 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; }
}

しかし、それから" new"を使用するニュアンスからトラブルに遭遇するでしょう。宣言。私はそれを試しましたが、ビジュアルスタジオデザイナーもこのアプローチから混乱し、ComboBoxStyle.DropDown(基本クラスのデフォルト)を強制するため、正しく動作しないようです。

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

役に立ちましたか?

解決

これは動作しているように見えます:

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;}
    }
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top