Pergunta

No .net, eu tenho um controle herdado:

public CustomComboBox : ComboBox

Eu simplesmente quero mudar o valor padrão de DropDownStyle propriedade, para outro valor (ComboBoxStyle.DropDownList), além de um padrão especificado na classe base (ComboBoxStyle.DropDown).

Pode-se pensar que você pode simplesmente adicionar o construtor:

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

No entanto, esta abordagem irá confundir o Visual Designer Studio. Ao projetar o costume de controle no Visual Studio, se você selecionar ComboBoxStyle.DropDown para o DropDownStyle ele pensa que a propriedade selecionado ainda é o valor padrão (a partir do [DevaultValue ()] na classe base ComboBox), por isso não faz adicionar uma linha customComboBox.DropDownStyle = ComboBoxStyle.DropDown para o arquivo Designer.cs. E confusamente o suficiente, você achar que o ecrã não se comportar conforme o esperado, uma vez ran.

Bem, você não pode substituir a propriedade DropDownStyle uma vez que não é virtual, mas você poderia fazer:

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

mas então você vai ter problemas das nuances do uso de "novas" declarações. Eu já tentei e não parece certo trabalho como o designer visual studio fica confuso com esta abordagem também e forças ComboBoxStyle.DropDown (o padrão para a classe base).

Existe alguma outra maneira de fazer isso? Desculpem a pergunta detalhado, é difícil de descrever em detalhes.

Foi útil?

Solução

Isto olha como ele funciona:

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;}
    }
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top