No C # WinApp, como posso adicionar texto e valor aos itens da minha ComboBox? Eu fiz uma pesquisa e geralmente as respostas estão usando "Vinculação a uma fonte" .. mas no meu caso eu não tenho uma fonte vinculativa pronta no meu programa ... Como posso fazer algo assim:
combo1.Item[1] = "DisplayText";
combo1.Item[1].Value = "useful Value"
fonte
Você pode usar classe anônima como esta:
ATUALIZAÇÃO: Embora o código acima seja exibido corretamente na caixa de combinação, você não poderá usar
SelectedValue
nem asSelectedText
propriedades deComboBox
. Para poder usá-los, vincule a caixa de combinação como abaixo:fonte
List<Object> items = new List<Object>();
Em seguida, pude usar o métodoitems.Add( new { Text = "report A", Value = "reportA" } );
dentro do loop.comboBox.SelectedItem.GetType().GetProperty("Value").GetValue(comboBox.SelectedItem, null)
DataSource
pode usar as propriedadesSelectedValue
ouSelectedText
da caixa de combinação, portanto, não é necessário fazer nenhuma conversão especial.Você deve usar o
dynamic
objeto para resolver o item da caixa de combinação em tempo de execução.fonte
Você pode usar o
Dictionary
Object em vez de criar uma classe personalizada para adicionar texto e valor em aCombobox
.Adicione chaves e valores em um
Dictionary
objeto:Vincule o objeto Dicionário de origem a
Combobox
:Recuperar chave e valor:
Fonte completa: Combobox Text nd Value
fonte
Essa é uma das maneiras que me veio à mente:
combo1.Items.Add(new ListItem("Text", "Value"))
E para alterar o texto ou o valor de um item, você pode fazer o seguinte:
Não há nenhuma classe chamada ListItem no Windows Forms . Ele existe apenas no ASP.NET , portanto, você precisará escrever sua própria classe antes de usá-la, da mesma forma que @Adam Markowitz em sua resposta .
Verifique também estas páginas, elas podem ajudar:
Como adicionar um item a uma caixa de combinação
Como: Adicionar e remover itens de um controle ComboBox, ListBox ou CheckedListBox do Windows Forms
fonte
Não sei se isso funcionará para a situação apresentada na postagem original (não importa o fato de que isso acontece dois anos depois), mas este exemplo funciona para mim:
Para ler seu valor novamente, você precisará converter a propriedade SelectedItem em um objeto DictionaryEntry e, em seguida, avaliar as propriedades Key e Value desse. Por exemplo:
fonte
fonte
Se alguém ainda estiver interessado nisso, aqui está uma classe simples e flexível para um item da caixa de combinação com um texto e um valor de qualquer tipo (muito semelhante ao exemplo de Adam Markowitz):
Usar o
<T>
é melhor do que declararvalue
como umobject
, porque comobject
ele é necessário acompanhar o tipo usado para cada item e convertê-lo em seu código para usá-lo corretamente.Eu tenho usado em meus projetos há um bom tempo agora. É realmente útil.
fonte
Eu gostei da resposta de fab, mas não queria usar um dicionário para a minha situação, então substituí uma lista de tuplas.
fonte
Um exemplo usando DataTable:
fonte
Você pode usar esse código para inserir alguns itens em uma caixa de combinação com texto e valor.
C #
XAML
fonte
Além da resposta de Adam Markowitz, eis uma maneira geral de (relativamente) simplesmente definir o
ItemSource
valores de uma caixa de combinaçãoenums
, mostrando o atributo 'Descrição' para o usuário. (Você acha que todo mundo gostaria de fazer isso para que fosse um .NET um liner do , mas não é, e é a maneira mais elegante que eu encontrei).Primeiro, crie esta classe simples para converter qualquer valor Enum em um item ComboBox:
Em segundo lugar no seu
OnLoad
manipulador de eventos, você precisa definir a fonte de sua caixa de combinação para ser uma lista deComboEnumItems
base em todaEnum
a suaEnum
tipo. Isso pode ser alcançado com o Linq. Em seguida, basta definir oDisplayMemberPath
:Agora, o usuário selecionará de uma lista amigável
Descriptions
, mas o que selecionar será oenum
valor que você pode usar no código. Para acessar a seleção do usuário no código,comboBoxUserReadable.SelectedItem
será oComboEnumItem
ecomboBoxUserReadable.SelectedValue
será oEMyEnum
.fonte
Você pode usar um tipo genérico:
Exemplo de uso de um simples tipo int:
fonte
Eu tive o mesmo problema, o que fiz foi adicionar um novo
ComboBox
com apenas o valor no mesmo índice do que o primeiro e, em seguida, quando altero o combo principal, o índice no segundo altera ao mesmo tempo, então pego o valor do segundo combo e use-o.Este é o código:
fonte
Creat da classe:
Códigos do Formulário1:
fonte
É assim que o Visual Studio 2013 faz isso:
Item único:
Vários itens:
Não há necessidade de fazer substituições de classe ou incluir qualquer outra coisa. E sim, as chamadas
comboBox1->SelectedItem
ecomboBox1->SelectedIndex
ainda funcionam.fonte
Isso é semelhante a algumas das outras respostas, mas é compacto e evita a conversão para dicionário, se você já possui uma lista.
Dado um
ComboBox
"combobox" em um formulário janelas e uma classeSomeClass
com astring
propriedade de tipoName
,O que significa que o SelectedItem é um
SomeClass
objetolist
e cada itemcombobox
será exibido usando seu nome.fonte
DisplayMember
antes ... sempre esqueço que existe. Eu me acostumei com a solução que encontrei antes de prestar atenção a essa propriedade, também nem sempre ajuda. Nem todas as classes possuem uma propriedadeName
ouTag
, ou possuem uma propriedade de cadeia que pode ser usada arbitrariamente como um texto de exibição.base.Method();
), mas você também precisaria criar uma classe derivada para cada tipo diferente que você deseja adicionar às caixas de combinação ou caixas de listagem. A classe que fiz é flexível, você pode usar com qualquer tipo sem nenhum esforço extra. Veja abaixo a minha resposta, e me diga o que você pensa :)Esta é uma solução muito simples para formulários do Windows, se tudo o que for necessário for o valor final como (string). Os nomes dos itens serão exibidos na caixa de combinação e o valor selecionado pode ser facilmente comparado.
e no manipulador de eventos, obtenha o valor (string) do valor selecionado
fonte
Melhor solução aqui;
Recuperar dados
fonte