Como definir o item selecionado em uma caixa de combinação para corresponder à minha string usando C #?


197

Eu tenho um string "test1" e meu comboBox contém test1, test2e test3. Como defino o item selecionado para "test1"? Ou seja, como faço para corresponder minha string a um dos itens da comboBox?

Eu estava pensando na linha abaixo, mas isso não funciona.

comboBox1.SelectedText = "test1"; 

como isso não funciona? O que acontece quando essa linha de código é executada?
22713 Kate

@KateGregory apenas concatena a string "test1" ao texto existente
solujic

Se você tem uma maneira de saber o valor do item, você pode usar: comboBox1.SelectedValue = Value_of_your_string;
César León

SelectedTextaltera o texto "Selecionado" para test1. se não houver uma "Seleção" (texto marcado) feita, o texto será inserido na posição do cursor.
AaA

Respostas:


278

Isso deve fazer o truque:

Combox1.SelectedIndex = Combox1.FindStringExact("test1")

Parece uma resposta melhor para mim, porque você tem um valor de retorno, pode salvar temporariamente em uma variável e usá-lo para testar se encontrou o valor que estava procurando.
Áxel Costas Pena

o que se houver mais de um valor "test1" em combox1
thoitbk

@thoitbk - De acordo com o MSDN em msdn.microsoft.com/en-us/library/… , o método FindStringExact() "Encontra o primeiro item na caixa de combinação que corresponde à seqüência especificada".
usar o seguinte comando

207

Você já tentou a propriedade Text ? Funciona para mim.

ComboBox1.Text = "test1";

A propriedade SelectedText é para a parte selecionada do texto editável na parte da caixa de texto da caixa de combinação.


7
Certamente isso apenas define o texto na área editável da ComboBox em vez de selecionar o item relevante da lista? Se a coleção de itens da lista contiver objetos em vez de apenas seqüências de caracteres, duvido que isso selecione o objeto ListItem apropriado, mas apenas defina a propriedade Text na ComboBox?
usar o seguinte código

9
Ele define a propriedade SelectedValue do controle
Henryk

Agradável. Funciona perfeitamente para tamanho de fonte, peso e pulldowns da família. Nenhuma conversão ou conversão entre classes. Tããão muito mais fácil!
Lance Cleveland

3
Apenas no caso: Este parâmetro deve ser definido somente após o preenchimento da caixa de combinação.
Antoine Rodriguez

12
Meu estilo de lista suspensa da caixa de combinação é DropDownList e .Text = "some text" não funciona. Esta solução funcionou bem para mim: Combox1.SelectedIndex = Combox1.FindStringExact ( "test1")
Mayank

48

Supondo que a sua caixa de combinação não esteja ligada à base de dados, você precisaria encontrar o índice do objeto na coleção "items" no seu formulário e depois definir a propriedade "selectedindex" para o índice apropriado.

comboBox1.SelectedIndex = comboBox1.Items.IndexOf("test1");

Lembre-se de que a função IndexOf pode gerar uma exceção de argumento se o item não for encontrado.


1
Lembre-se de sua SelectedIndex não selectedItem ... E o compilador não vai reclamar, apenas não conseguem definir o valor combobox
Rob

Você não ama erros lógicos que não lançam nenhuma exceção, eles simplesmente não funcionam ...
Spence

isto está selecionando o item, mas não chamando o evento onChange na caixa de combinação
mrid

39

Se os itens na sua ComboBox forem cadeias de caracteres, você pode tentar:

comboBox1.SelectedItem = "test1";


Salvou o dia! O item selecionado deve corresponder ao tipo - foi isso para mim! Eu estava coçando a cabeça por que o item selecionado não foi definido, mesmo que o item estivesse claramente lá - acabou sendo uma incompatibilidade de tipo!
Sudhanshu Mishra 15/05

Por uma questão de integridade, é útil ter a descrição do link acima, especialmente porque essa resposta executa a verificação correspondente sugerida por outras respostas, incluindo a preferida de @norbertB: Quando você define a propriedade SelectedItem como um objeto, a ComboBox tenta fazer com que o objeto o atualmente selecionado na lista. Se o objeto for encontrado na lista , ele será exibido na parte de edição da ComboBox e a propriedade SelectedIndex será definida como o índice correspondente. Se o objeto não existir na lista, a propriedade SelectedIndex será deixada em seu valor atual.
DanG 29/03

10

Para mim, isso funcionou apenas:

foreach (ComboBoxItem cbi in someComboBox.Items)
{
    if (cbi.Content as String == "sometextIntheComboBox")
    {
        someComboBox.SelectedItem = cbi;
        break;
    }
}

MOD: e se você tiver seus próprios objetos como itens configurados na caixa de combinação, substitua o ComboBoxItem por um deles como:

foreach (Debitor d in debitorCombo.Items)
{
    if (d.Name == "Chuck Norris")
    {
        debitorCombo.SelectedItem = d;
        break;
    }
}

2
Isso funcionou para mim, mas você precisa ter cuidado para que os itens na sua ComboBox sejam realmente ComboBoxItems, pois é possível colocar outros itens também.
Grant

Isso funcionou muito bem no WinRT 8.1. Na verdade, envolvi o foreach superior em um método de extensão como o dave escreveu em sua solução SelectItemByValue (), e era realmente a solução perfeita.
Speednet

9

SelectedText é obter ou definir o texto real no editor de strings para o item selecionado na caixa de combinação, conforme documentado aqui . Isso não é editável se você definir:

comboBox1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;

Usar:

comboBox1.SelectedItem = "test1";

ou:

comboBox1.SelectedIndex = comboBox1.Items.IndexOf("test1");

1
comboBox1.Items.IndexOf ... corre o risco de uma NullReferenceException se Items estiver vazio.
18712 Gary Gary

9
ComboBox1.SelectedIndex= ComboBox1.FindString("Matching String");

Tente isso no Windows Form.


7

Eu usei um método de extensão:

public static void SelectItemByValue(this ComboBox cbo, string value)
{
    for(int i=0; i < cbo.Items.Count; i++)
    {
        var prop = cbo.Items[i].GetType().GetProperty(cbo.ValueMember);
        if (prop!=null && prop.GetValue(cbo.Items[i], null).ToString() == value)
        {
             cbo.SelectedIndex = i;
             break;
        }
    } 
}

Em seguida, consuma o método:

ddl.SelectItemByValue(value);

5
comboBox1.SelectedItem.Text = "test1";


4

Esta solução é baseada no MSDN com algumas modificações que eu fiz.

  • Ele encontra exata ou PARTE da string e a define.

    private int lastMatch = 0;
    private void textBoxSearch_TextChanged(object sender, EventArgs e)
    {
        // Set our intial index variable to -1.
        int x = 0;
        string match = textBoxSearch.Text;
        // If the search string is empty set to begining of textBox
        if (textBoxSearch.Text.Length != 0)
        {
            bool found = true;
            while (found)
            {
                if (comboBoxSelect.Items.Count == x)
                {
                    comboBoxSelect.SelectedIndex = lastMatch;
                    found = false;
                }
                else
                {
                    comboBoxSelect.SelectedIndex = x;
                    match = comboBoxSelect.SelectedValue.ToString();
                    if (match.Contains(textBoxSearch.Text))
                    {
                        lastMatch = x;
                        found = false;
                    }
                    x++;
                }
            }
        }
        else
            comboBoxSelect.SelectedIndex = 0;
    }

Espero ter ajudado!


3

Enchi minha ComboBox com o een DataTable preenchido em um banco de dados. Então eu configurei o DisplayMember e o ValueMember. E eu uso esse código para definir o item selecionado.

foreach (DataRowView Row in ComboBox1.Items)
{
    if (Row["ColumnName"].ToString() == "Value") ComboBox1.SelectedItem = Row;
}

1

Você não tem essa propriedade na ComboBox. Você tem SelectedItem ou SelectedIndex. Se você tiver os objetos usados ​​para preencher a caixa de combinação, poderá usar o SelectedItem.

Caso contrário, você pode obter a coleção de itens (propriedade Items) e iterar até obter o valor desejado e usá-lo com as outras propriedades.

espero que ajude.


1
_cmbTemplates.SelectedText = "test1"

ou talvez

_cmbTemplates.SelectedItem= _cmbTemplates.Items.Equals("test1");

com esse código, você atribui um booleano à propriedade SelectedItem ... não funcionará imho.
Frederik Gheysels

1
  • Enumerar ListItems na caixa de combinação
  • Obter iguais listindex set combobox
  • Defina listindex como o encontrado.

Mas se eu vir esse código como revisor de códigos, recomendo reconsiderar todo o algoritmo do método.


2
Por que você forneceu como resposta então?

1

Eu usei KeyValuePair para vinculação de dados ComboBox e queria encontrar item por valor, para que isso funcionasse no meu caso:

comboBox.SelectedItem = comboBox.Items.Cast<KeyValuePair<string,string>>().First(item=> item.Value == "value to match");

1

Encontre mySecondObject (do tipo MyObject) na caixa de combinação (contendo uma lista de MyObjects) e selecione o item:

foreach (MyObject item in comboBox.Items)
{
   if (item.NameOrID == mySecondObject.NameOrID)
    {
        comboBox.SelectedItem = item;
        break;
    }
}

0
  ListItem li = DropDownList.Items.FindByValue("13001");
  DropDownList.SelectedIndex = ddlCostCenter.Items.IndexOf(li);

Para o seu caso, você pode usar

DropDownList.Items.FindByText("Text");


0

Todos os métodos, truques e linhas de código que definem o item ComboBox não funcionarão até que o ComboBox tenha um pai.


0

Eu criei uma função que retornará o índice do valor

        public static int SelectByValue(ComboBox comboBox, string value)
        {
            int i = 0;
            for (i = 0; i <= comboBox.Items.Count - 1; i++)
            {
                DataRowView cb;
                cb = (DataRowView)comboBox.Items[i];
                if (cb.Row.ItemArray[0].ToString() == value)// Change the 0 index if your want to Select by Text as 1 Index
                {
                    return i;
                }
            }
            return -1;
        }

0

isso funciona para mim .....

comboBox.DataSource.To<DataTable>().Select(" valueMember = '" + valueToBeSelected + "'")[0]["DislplayMember"];

1
Embora esse código possa responder à pergunta, é melhor explicar como resolver o problema e fornecer o código como exemplo ou referência. As respostas somente de código podem ser confusas e sem contexto.
Robert Columbia

Obrigado pelo conselho!
Jaydeep Karena


-2

Por favor, tente desta maneira, funciona para mim:

Combobox1.items[Combobox1.selectedIndex] = "replaced text";

Você deve verificar se selectedIndex não é -1 primeiro ou mais precisamente se é> = 0 e <.items.length.
21712 Gary

-3

Deveria funcionar

Yourcomboboxname.setselecteditem("yourstring");

E se você deseja definir a string do banco de dados, use este

Comboboxname.setselecteditem(ps.get string("databasestring"));
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.