[Delphi] Como guardar um valor em um TComboBox?
04/08/2017
0
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
Post mais votado
04/08/2017
Veja se este link ajuda:
http://wiki.portugal-a-programar.pt/dev_geral:pascal:delphi:associar_dados_list_combo
Natanael Ferreira
Mais Posts
04/08/2017
Luiz Vichiatto
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
04/08/2017
Rafael Bosco
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.
05/08/2017
Raimundo Pereira
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.
15/05/2022
Mário Reis
À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
16/05/2022
Gladstone Matos
Eu adicionei os valores da seguinte forma.
boa ideia Rafael!
Clique aqui para fazer login e interagir na Comunidade :)