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"; 
Peter Mortensen
fonte
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")
Norbert B.
fonte
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.

Andrew Kennan
fonte
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.

Spence
fonte
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";
Frederik Gheysels
fonte
18
Não, não é: msdn.microsoft.com/en-us/library/…
Frederik Gheysels
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;
    }
}
gabore
fonte
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");
Brian Rudolph
fonte
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.

Muhammad Sohail
fonte
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);
Dave
fonte
5
comboBox1.SelectedItem.Text = "test1";
Ben
fonte
4

Supondo que test1, test2, test3 pertençam à coleção comboBox1, a seguinte instrução funcionará.

comboBox1.SelectedIndex = 0; 
ihcarp
fonte
Isso nem sempre funciona ... Veja aqui: stackoverflow.com/questions/12839444/…
JGFMK
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!

Roman Polen.
fonte
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;
}
Jelle Smits
fonte
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.

Megacan
fonte
1
_cmbTemplates.SelectedText = "test1"

ou talvez

_cmbTemplates.SelectedItem= _cmbTemplates.Items.Equals("test1");
reitor
fonte
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.

user53378
fonte
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");
Amit Bhagat
fonte
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;
    }
}
Jos Roestenberg
fonte
0
  ListItem li = DropDownList.Items.FindByValue("13001");
  DropDownList.SelectedIndex = ddlCostCenter.Items.IndexOf(li);

Para o seu caso, você pode usar

DropDownList.Items.FindByText("Text");
user874163
fonte
0
combo.Items.FindByValue("1").Selected = true;
Anderson
fonte
3
Isso também arrisca uma exceção se "1" não for encontrado.
18712 Gary Gary
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.

user3599362
fonte
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;
        }
Monzur
fonte
0

isso funciona para mim .....

comboBox.DataSource.To<DataTable>().Select(" valueMember = '" + valueToBeSelected + "'")[0]["DislplayMember"];
Jaydeep Karena
fonte
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
-1

Você pode dizer comboBox1.Text = comboBox1.Items[0].ToString();

Nishān Wickramrathna
fonte
-2

Por favor, tente desta maneira, funciona para mim:

Combobox1.items[Combobox1.selectedIndex] = "replaced text";
HuynhDo
fonte
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"));
Deepak kumar
fonte