ComboBox - Valores para exibir e para processar
Pessoal, como faço para, num combo-box, exibir um valor, mas internamente eu processar outro? Por exemplo, quero exibir para o usuário o nome de alunos, mas, qdo ele escolher um nome, quero processar pela matrícula do aluno. Há uma forma de exibir um valor, mas trabalhar com outro?
Obrigado.
Obrigado.
Gleison_gomes
Curtidas 0
Respostas
Adilsond
12/11/2004
[url]http://delphiforum.icft.com.br/forum/viewtopic.php?t=41116&highlight=addobject[/url]
GOSTEI 0
Adilsond
12/11/2004
[url]http://delphiforum.icft.com.br/forum/viewtopic.php?t=41116&highlight=addobject[/url]
GOSTEI 0
Gleison_gomes
12/11/2004
Obrigado, Adilson!
Mas há um jeito de eu exibir um texto e trabalhar com um valor tb em string, não como inteiro? Preciso exibir um nome amigável para o usuário e trabalhar com o nome do campo das tabelas... Por exemplo: quero exibir ´Nome do Aluno´, mas trabalhar no combo como ´nome_aluno´.
Obrigado.
Mas há um jeito de eu exibir um texto e trabalhar com um valor tb em string, não como inteiro? Preciso exibir um nome amigável para o usuário e trabalhar com o nome do campo das tabelas... Por exemplo: quero exibir ´Nome do Aluno´, mas trabalhar no combo como ´nome_aluno´.
Obrigado.
GOSTEI 0
Repa
12/11/2004
Nos casos que preciso mostrar um campo nome p/ o usuário mas usar o campo código no programa eu uso dblookupcombobox, criando uma tabela temporária p/ gravar o valor do campo que quero usar.
GOSTEI 0
Adilsond
12/11/2004
Adicionando os itens:
Pegando o valor:
Voce deve liberar os objetos ao final ou a cada vez que for remontar a lista:
ComboBox1.Items.AddObject(FieldByName(´XXXX´).AsString, TObject(LongInt(NewStr(FieldByName(´YYYY´).AsString))));
Pegando o valor:
strID := PString(ComboBox1.Items.Objects[ComboBox1.ItemIndex])^;
Voce deve liberar os objetos ao final ou a cada vez que for remontar a lista:
for I := 0 to ComboBox1.Items.Count - 1 do DisposeStr(PString(cbGroups.Items.Objects[i]));
GOSTEI 0
Adilsond
12/11/2004
Onde esta cbGroups, mue para ComboBox1
for I := 0 to ComboBox1.Items.Count - 1 do DisposeStr(PString(ComboBox1.Items.Objects[i]));
GOSTEI 0
Adilsond
12/11/2004
Outra maneira é criar uma classe:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TMyComboObject = class
private
{ Private declarations }
fId: Integer;
fName: String;
public
{ Public declarations }
constructor Create(Id: Integer; Name: String);
property Id: Integer read fId;
property Name: String read fName;
end;
TForm1 = class(TForm)
Button1: TButton;
ComboBox1: TComboBox;
Edit1: TEdit;
Edit2: TEdit;
procedure Button1Click(Sender: TObject);
procedure ComboBox1Change(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
procedure ClearComboBox;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
constructor TMyComboObject.Create(Id: Integer; Name: String);
begin
fId := Id;
fName := Name;
end;
procedure TForm1.ClearComboBox;
var
I: Integer;
begin
if ComboBox1.Items.Count > 0 then
begin
for I := 0 to ComboBox1.Items.Count - 1 do
TMyComboObject(ComboBox1.Items.Objects[I]).Free;
ComboBox1.Clear;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ClearComboBox;
ComboBox1.Items.AddObject(´Elemento 1´, TMyComboObject.Create(1,´Um´));
ComboBox1.Items.AddObject(´Elemento 2´, TMyComboObject.Create(2,´Dois´));
ComboBox1.Items.AddObject(´Elemento 3´, TMyComboObject.Create(3,´Tres´));
ComboBox1.Items.AddObject(´Elemento 4´, TMyComboObject.Create(4,´Quatro´));
ComboBox1.Items.AddObject(´Elemento 5´, TMyComboObject.Create(5,´Cinco´));
ComboBox1.Items.AddObject(´Elemento 6´, TMyComboObject.Create(6,´Seis´));
ComboBox1.Items.AddObject(´Elemento 7´, TMyComboObject.Create(7,´Sete´));
ComboBox1.Items.AddObject(´Elemento 8´, TMyComboObject.Create(8,´Oito´));
ComboBox1.Items.AddObject(´Elemento 9´, TMyComboObject.Create(9,´Nove´));
end;
procedure TForm1.ComboBox1Change(Sender: TObject);
begin
Edit1.Text := IntToStr(TMyComboObject(ComboBox1.Items.Objects[ComboBox1.ItemIndex]).Id);
Edit2.Text := TMyComboObject(ComboBox1.Items.Objects[ComboBox1.ItemIndex]).Name;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
ClearComboBox;
end;
end.GOSTEI 0
Gleison_gomes
12/11/2004
E aí, tudo bem?
Criei o compo de acordo com sua primeira dica, obrigado!
Porém, qdo vou recuperar o valor selecionado, estão vindo caracteres especiais (´#0000´)que estão atrapalhando ao concatenar para formar uma expressão. O que fazer para ´filtrar´ estes caracteres?
Obrigado.
Criei o compo de acordo com sua primeira dica, obrigado!
Porém, qdo vou recuperar o valor selecionado, estão vindo caracteres especiais (´#0000´)que estão atrapalhando ao concatenar para formar uma expressão. O que fazer para ´filtrar´ estes caracteres?
Obrigado.
GOSTEI 0
Adilsond
12/11/2004
Provavelmente estes caracteres já devem estar sendo montados na string. Verifique...
GOSTEI 0
Gleison_gomes
12/11/2004
Valeu, descobri o erro.
Realmente era na geração da string.
Obrigado!
Realmente era na geração da string.
Obrigado!
GOSTEI 0