[Delphi] Como guardar um valor em um TComboBox?
boa tarde people tudo bom?
Vamos lá! Normalmente, quando utilizamos um Combobox no Delphi, a gente acaba verificando o valor selecionado através da propriedade ItemIndex. Por exemplo:
O problema é óbvio: se a gente trocar a ordem dos elementos, inserir algum elemento novo, etc, a lógica muda toda. Existe alguma forma de armazenar algum outro VALUE no item do Combobox?
O que vocês acham?
abraços
Vamos lá! Normalmente, quando utilizamos um Combobox no Delphi, a gente acaba verificando o valor selecionado através da propriedade ItemIndex. Por exemplo:
if cboFormaPagamento.ItemIndex=0 then begin // tratar pagamento BOLETO end else if combobox1.ItemIndex=1 then begin //tratar pagamento CARTAO end;
O problema é óbvio: se a gente trocar a ordem dos elementos, inserir algum elemento novo, etc, a lógica muda toda. Existe alguma forma de armazenar algum outro VALUE no item do Combobox?
O que vocês acham?
abraços
Gladstone Matos
Curtidas 0
Melhor post
Natanael Ferreira
04/08/2017
Você utilizar a propriedade AddItem para este caso.
Veja se este link ajuda:
http://wiki.portugal-a-programar.pt/dev_geral:pascal:delphi:associar_dados_list_combo
Veja se este link ajuda:
http://wiki.portugal-a-programar.pt/dev_geral:pascal:delphi:associar_dados_list_combo
GOSTEI 1
Mais Respostas
Luiz Vichiatto
04/08/2017
Gladstone Gomes,
Tive um situação similar, resolvi com uma dbComboBox com tipos de pagamento, a partir 'insert' na tabela de pagamentos tratava as opções por storeprocedure, assim todas as vezes que eu inseria uma modo de pagamento o cliente já estava com a opção e o banco já conseguia tratar.
Isso também depende da como está modelado o banco.
Tive um situação similar, resolvi com uma dbComboBox com tipos de pagamento, a partir 'insert' na tabela de pagamentos tratava as opções por storeprocedure, assim todas as vezes que eu inseria uma modo de pagamento o cliente já estava com a opção e o banco já conseguia tratar.
Isso também depende da como está modelado o banco.
dbComboBox.Value
GOSTEI 1
Rafael Bosco
04/08/2017
Existe sim, quando você adicionar os itens no ComboBox sugiro usar o método AddObject, abaixo um EXEMPLO de leitura de informações de um StringList e adicionando ao ComboBox:
Depois que você inseriu os itens no ComboBox, para você obter determinado valor, faça o processo abaixo:
No exemplo, eu dei um CAST como INTEGER no OBJECTS do combobox, que no caso, vai me retornar o Número inteiro adicionado o objeto, mesmo que a ordem dos ItemIndex mude, a dos objetos adicionados, não será modificada.
class procedure TSuaClasse.LoadAlgo(ACombo: TComboBox); var List: TStringList; Numeros, Loop: Integer; begin List := TStringList.Create; try List.Add('123'); List.Add('3434'); if List.Count > 0 then begin ACombo.Items.Clear; ACombo.Items.BeginUpdate; for Loop := 0 to List.Count - 1 do begin if TryStrToInt(List[Loop], Numeros) then ACombo.Items.AddObject('Número - ' + List[Loop], TObject(Numeros)); end; ACombo.Items.EndUpdate; end; finally FreeAndNil(List); end; end;
Depois que você inseriu os itens no ComboBox, para você obter determinado valor, faça o processo abaixo:
property Numeros: Integer read GetNumeros write SetNumeros; //Eu utilizo encapsulamento em informações como essa para que a segurança do valor nunca seja alterada. function GetNumeros: Integer; begin if (CBSerie.Items.Count > 0) and (CBSerie.ItemIndex > -1) then Result := Integer(CBSerie.Items.Objects[CBSerie.ItemIndex]) else Result := 0; end;
No exemplo, eu dei um CAST como INTEGER no OBJECTS do combobox, que no caso, vai me retornar o Número inteiro adicionado o objeto, mesmo que a ordem dos ItemIndex mude, a dos objetos adicionados, não será modificada.
GOSTEI 0
Raimundo Pereira
04/08/2017
Lembro que uma vez ao montar o combobox.
Eu adicionei os valores da seguinte forma.
combobox.items.add('ID_FILIAL|NOME_FILIAL');
Isso ao varrer minha tabela filial.
Para uso posteriormente.
Então no visual do combobox eu tinha:
1|SAO PAULO
2|BAHIA
3|RIO DE JANEIRO
Ao selecionar eu pegava o valor por delimitador, no caso 1,2,3....
Isso pq eu trabalhei com combobox, se for trabalhar com dblookupcombox acredito que não tenha tal necessidade.
Eu adicionei os valores da seguinte forma.
combobox.items.add('ID_FILIAL|NOME_FILIAL');
Isso ao varrer minha tabela filial.
Para uso posteriormente.
Então no visual do combobox eu tinha:
1|SAO PAULO
2|BAHIA
3|RIO DE JANEIRO
Ao selecionar eu pegava o valor por delimitador, no caso 1,2,3....
Isso pq eu trabalhei com combobox, se for trabalhar com dblookupcombox acredito que não tenha tal necessidade.
GOSTEI 1
Mário Reis
04/08/2017
Interessante, mas acho que a dificuldade maior será como assignar um valor pré definido a ComboBox: JvDbcbbTIPO_ID.DataSource.DataSet.FieldByName(''Tipo_Id'').AsString:=''CC'' de uma litaa c/ ''CC,BI,PP,LC, ETC''. por exemplo ao passar de um processamento de ficheiro texto para dados; carreguei o campo em vez do valor da JvDbcbb
Às tantas não há outra forma a não ser fazer um ciclo na lista de que não seja fazer um ciclo while JvDbcbbTIPO_ID.Values[ Idx ]<>''CC'' do Inc(Idx) quando fizer match rebenta o clico? Deveria haver uma modo direto de fazer! Não?
Ainda não descobri se alguém já fez isto antes e quizer partilhar. Origado
Às tantas não há outra forma a não ser fazer um ciclo na lista de que não seja fazer um ciclo while JvDbcbbTIPO_ID.Values[ Idx ]<>''CC'' do Inc(Idx) quando fizer match rebenta o clico? Deveria haver uma modo direto de fazer! Não?
Ainda não descobri se alguém já fez isto antes e quizer partilhar. Origado
GOSTEI 1
Gladstone Matos
04/08/2017
Lembro que uma vez ao montar o combobox.
Eu adicionei os valores da seguinte forma.
Eu adicionei os valores da seguinte forma.
boa ideia Rafael!
GOSTEI 0