Fórum [Delphi] Como guardar um valor em um TComboBox? #584474
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
Curtir tópico
+ 0Post 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
Gostei + 1
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
Gostei + 1
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.
Gostei + 0
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.
Gostei + 1
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
Gostei + 1
16/05/2022
Gladstone Matos
Eu adicionei os valores da seguinte forma.
boa ideia Rafael!
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)