Frage

In .net, ich habe eine vererbte Kontrolle:

public CustomComboBox : ComboBox

Ich mag einfach den Standardwert von Dropdownstyle Eigenschaft ändern, auf einem anderen Wert (ComboBoxStyle.DropDownList), neben dem Standard eines in der Basisklasse angegeben (ComboBoxStyle.DropDown).

Man könnte denken, dass man einfach den Konstruktor hinzu:

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

Allerdings wird dieser Ansatz der Visual Studio Designer verwirren. Wenn das benutzerdefinierte Steuerelement in Visual Studio entwerfen, wenn Sie ComboBoxStyle.DropDown für den Dropdownstyle wählen denkt, dass die Eigenschaft, die Sie immer noch der Standardwert (von der [DevaultValue ()] in der Basis ComboBox-Klasse) ausgewählt ist, so tut es nicht eine customComboBox.DropDownStyle = ComboBoxStyle.DropDown Linie zur Designer.cs Datei hinzufügen. Und zum Verwechseln genug, finden Sie, dass der Bildschirm nicht so verhält sich bestimmt einmal lief.

Nun können Sie die Dropdownstyle-Eigenschaft überschreiben, da es nicht virtuell, aber Sie tun können:

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

aber dann werden Sie in Schwierigkeiten von den Nuancen der Verwendung von „neuen“ Erklärungen laufen. Ich habe es ausprobiert und es scheint nicht richtig zu arbeiten, wie Visual Studio-Designer von diesem Ansatz verwechselt werden auch und Kräfte ComboBoxStyle.DropDown (der Standard für die Basisklasse).

Gibt es eine andere Möglichkeit, dies zu tun? Sorry für die ausführliche Frage, ist es schwer, im Detail zu beschreiben.

War es hilfreich?

Lösung

Das sieht aus wie es funktioniert:

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;}
    }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top