Erro: O ComboBox não limpa quando você definir SelectedIndex como -1

IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.

Clique aqui para ver a versão em Inglês deste artigo: 327244
Aviso de Isenção de Responsabilidade sobre Conteúdo do KB Aposentado
Este artigo trata de produtos para os quais a Microsoft não mais oferece suporte. Por esta razão, este artigo é oferecido "como está" e não será mais atualizado.
Sintomas
Quando você definir a propriedade SelectedIndex de um controle ComboBox do Windows Forms de ligados a dados igual a -1, o item selecionado não não desmarque da ComboBox.

Quando o valor de -1 é atribuído à propriedade pela primeira vez, o primeiro item no índice 0 (zero) é selecionado em da caixa de combinação. Quando o valor de -1 é atribuído à propriedade pela segunda vez, essa atribuição faz com que a ComboBox limpar.
Causa
Quando você atribuir-1 para a propriedade SelectedIndex do ComboBox pela primeira vez, isso faz com que o item no índice de 0 a ser selecionado. Se o item no índice 0 já estiver selecionado, o ComboBox limpa.
Resolução
Para contornar esse problema, use um dos seguintes métodos:
  • método 1
    Use o código a seguir para atribuir o valor -1 a SelectedIndex duas vezes em uma linha:
    ComboBox1.SelectedIndex = -1ComboBox1.SelectedIndex = -1					
  • método 2
    Use o código a seguir para atribuir o valor 0 a SelectedIndex primeiro, seguido pelo valor -1:
    ComboBox1.SelectedIndex = 0ComboBox1.SelectedIndex = -1					
  • método 3
    Use o seguinte código para adicionar itens para o controle manualmente em vez de ligação a uma fonte de dados:
       Dim DataTbl As New DataTable("DemoTable")   Dim DataCol1 As New DataColumn()   Dim DataCol2 As New DataColumn()   Dim DRow As DataRow   Dim counter As Int32   DataCol1.DataType = GetType(Int32)   DataCol1.ColumnName = "ID"   DataCol1.AutoIncrement = True   DataTbl.Columns.Add(DataCol1)      Dim Key(0) As DataColumn   Key(0) = DataCol1   DataTbl.PrimaryKey = Key   DataCol2.DataType = GetType(String)   DataCol2.ColumnName = "CompanyName"   DataTbl.Columns.Add(DataCol2)   For counter = 0 To 10      DRow = DataTbl.NewRow()      DRow("CompanyName") = "John " & counter.ToString      DataTbl.Rows.Add(DRow)   Next   ' Populate the ComboBox manually   Dim dr As DataRow   For Each dr In DataTbl.Rows      ComboBox1.Items.Add(dr("CompanyName"))   Next					
Situação
A Microsoft confirmou que esse é um problema nos produtos da Microsoft listados na seção "Aplica-se a".
Mais Informações

Etapas para reproduzir o comportamento

  1. Crie um novo aplicativo do Windows.
  2. Adicione uma caixa de combinação e um controle Button ao formulário.
  3. Clique duas vezes o formulário e, em seguida, digite o código a seguir no evento Load do formulário:
       Dim DataTbl As New DataTable("DemoTable")   Dim DataCol1 As New DataColumn()   Dim DataCol2 As New DataColumn()   Dim DRow As DataRow   Dim counter As Int32   DataCol1.DataType = GetType(Int32)   DataCol1.ColumnName = "ID"   DataCol1.AutoIncrement = True   DataTbl.Columns.Add(DataCol1)      Dim Key(0) As DataColumn   Key(0) = DataCol1   DataTbl.PrimaryKey = Key   DataCol2.DataType = GetType(String)   DataCol2.ColumnName = "Name"   DataTbl.Columns.Add(DataCol2)   For counter = 0 To 10      DRow = DataTbl.NewRow()      DRow("Name") = "John " & counter.ToString      DataTbl.Rows.Add(DRow)   Next   With ComboBox1      .DataSource = DataTbl       .ValueMember = "ID"      .DisplayMember = "Name"   End With					
  4. Clique duas vezes no botão para inserir código para o evento Click:
    ComboBox1.SelectedIndex = -1					
  5. Pressione F5 para executar o aplicativo.
  6. Selecione um item, diferente do primeiro, da ComboBox e, em seguida, pressione o botão no formulário.

    O primeiro item agora aparece no ComboBox. Se você pressionar o botão uma segunda vez, o ComboBox limpa.

Aviso: este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 327244 - Última Revisão: 01/12/2006 20:20:13 - Revisão: 3.0

Microsoft Common Language Runtime (included with the .NET Framework) 1.0

  • kbmt kbbug kbnofix KB327244 KbMtpt
Comentários