Alterar o valor padrão de uma propriedade em um controle .net herdada
-
03-07-2019 - |
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.
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;}
}
}