[Delphi] Como guardar um valor em um TComboBox?

Delphi

04/08/2017

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:

  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

Gladstone Matos

Curtidas 0

Melhor post

Natanael Ferreira

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
GOSTEI 1

Mais Respostas

Luiz Vichiatto

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.

dbComboBox.Value
GOSTEI 1
Rafael Bosco

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:

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

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.
GOSTEI 1
Mário Reis

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
GOSTEI 1
Gladstone Matos

Gladstone Matos

04/08/2017

Lembro que uma vez ao montar o combobox.
Eu adicionei os valores da seguinte forma.


boa ideia Rafael!

GOSTEI 0
POSTAR