O que devo fazer se não quiser que algumas propriedades públicas de um componente sejam adicionadas ao método InitializeComponent() pelo VS durante o design? Tentei adicionar [Browsable(false)] ao atributo, mas também não funcionou.
Meu código é o seguinte:
/// <resumo>
/// Caixa de listagem suspensa do tipo de comunicação do controlador.
/// </sumário>
classe pública CommunicationTypeComboBox: ComboBox
{
/// <resumo>
/// Construa uma instância de caixa de listagem.
/// </sumário>
Comunicação públicaTypeComboBox()
{
Items.Add("Porta Serial");
Itens.Add("TCP");
}
/// <resumo>
/// Obtém todos os itens da caixa de listagem.
/// </sumário>
[Navegável(falso)]
novos itens públicos do ObjectCollection
{
obter {retornar base.Items};
}
}
Coloque o controle no formulário e o VS adicionará automaticamente algum código ao método InitializeComponent(). Parte ousada.
//
// cmbCommunicationType
//
this.cmbCommunicationType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cmbCommunicationType.FormattingEnabled = verdadeiro;
this.cmbCommunicationType.Items.AddRange(novo objeto[] {
"porta serial",
"TCP"});
this.cmbCommunicationType.Location = novo System.Drawing.Point(124, 66);
this.cmbCommunicationType.Name = "cmbCommunicationType";
this.cmbCommunicationType.SelectedItem = Xunmei.Door.CommunicationType.SerialPort;
this.cmbCommunicationType.Size = new System.Drawing.Size(121, 20);
this.cmbCommunicationType.TabIndex = 2;
this.cmbCommunicationType.SelectedIndexChanged += new System.EventHandler(this.cmbCommunicationType_SelectedIndexChanged);
Ficará assim à medida que o número de edições aumentar. Existe uma maneira de contornar isso além de não adicionar itens no construtor?
this.cmbCommunicationType.Items.AddRange(novo objeto[] {
"porta serial",
"TCP",
"porta serial",
"TCP",
"porta serial",
"TCP",
"porta serial",
"TCP",
"porta serial",
"TCP"});
Após vários dias de trabalho duro, finalmente encontrei a classe DesignOnlyAttribute.
Especifica se uma propriedade só pode ser definida em tempo de design.
Os membros marcados pela definição de DesignOnlyAttribute como true só podem ser definidos em tempo de design. Normalmente, essas propriedades só existem em tempo de design e não correspondem a uma propriedade real no objeto de tempo de execução.
Membros que não possuem atributos (Attribute) ou que são marcados pela configuração de DesignOnlyAttribute como false podem ser definidos em tempo de execução. O padrão é falso.
Adicionar DesignOnlyAttribute ao atributo Items de CommunicationTypeComboBox pode resolver perfeitamente esse problema.
/// <resumo>
/// Obtém todos os itens da caixa de listagem.
/// </sumário>
[DesignSomente(falso)]
novos itens públicos do ObjectCollection
{
obter {retornar base.Items};
}