Combobox não fixa o valor escolhido em tempo de execução

Delphi

26/10/2017

Pessoal, tudo bem?

Estou com uma rotina que o combobox adciona itens na sua lista em tempo real a partir de um determinado item "X" previamente selecionado no programa.

Entretanto, dependendo do item que for selecionado "x" ele faz o preenchimento deste combobox com diferentes valores.
Até aí, está tudo bem, pois o combobox consegue fazer a leitura e adcionar os itens necessários com base na escolha de "x".

O problema ocorre porque o combobox mostra a lista correta, mas não guarda os valores (não fica fixado o valor quando eu escolho no combobox), de modo que parece que o combobox se "limpa automaticamente" (coisa que não quero que aconteça) - fica parecendo que eu não selecionei nenhum item, mas ao selecionar o item que aparece, ele não grava e deixa em branco o combobox novamente.


Estou utilizando o seguinte código:


procedure TForm1.ComboBox4Change(Sender: TObject);
begin
if ComboBox4.ItemIndex = 0

Then Begin

Combobox3.Text:='';
ComboBox3.Items.Clear;
Combobox3.items.add('4.0 mm');
Combobox3.items.add('5.0 mm');
Combobox3.items.add('6.0 mm');
Combobox3.items.add('7.0 mm');
Combobox3.items.add('8.0 mm');

if ComboBox3.ItemIndex = 0
Then Begin
Asp:=12.6;
End;
if ComboBox3.ItemIndex = 1
Then Begin
Asp:=19.6;
End;
if ComboBox3.ItemIndex = 2
Then Begin
Asp:=28.3;
End;
if ComboBox3.ItemIndex = 3
Then Begin
Asp:=38.5;
End;
if ComboBox3.ItemIndex = 4
Then Begin
Asp:=50.3;
End;

End;
end;


Percebam que eu quero que o combobox3 dependendo do que for selecionado, guarde a variável "asp", do tipo real.

Podem, por gentileza, me ajudar a solucionar o problema?
Desde já, agradeço.

abs.

JD
Joao Df

Joao Df

Curtidas 0

Melhor post

Flavio Ferreira

Flavio Ferreira

27/10/2017

os moderadores somente respondem programação avançada?? fiz um topico de C......e vi que outros topicos sobre C tambem ninguem responde!! absurdo isso!
GOSTEI 1

Mais Respostas

Gabriel Baltazar

Gabriel Baltazar

26/10/2017

Bom dia, primeiro só gostaria de sugerir nesse caso usar um case ao invés de um monte de if, fica mais limpo na minha opinião.
Ficaria algo como:

case ComboBox3.ItemIndex of
  0 : Asp:=12.6;
  1 : Asp:=19.6;
  ....
end;


Agora pelo que observei você faz esses testes no Change de outro comboBox, no mesmo que você usa pra prencher. Pelo que entendi do seu código esse Case você deveria fazer no Change do ComboBox3, no Change do ComboBox4 ficaria só até a parte que você adiciona os itens
GOSTEI 0
Joao Df

Joao Df

26/10/2017

Perfeito.. Desta maneira meu código completo ficou da seguinte maneira:


procedure TForm1.ComboBox4Change(Sender: TObject);
begin
Combobox3.Items.Clear;
if ComboBox4.ItemIndex = 0
Then Begin
Combobox3.Text:='';

Combobox3.items.add('4.0 mm');
Combobox3.items.add('5.0 mm');
Combobox3.items.add('6.0 mm');
Combobox3.items.add('7.0 mm');
Combobox3.items.add('8.0 mm');

case ComboBox3.ItemIndex of
0 : Asp:=12.6;
1 : Asp:=19.6;
2 : Asp:=28.3;
3 : Asp:=38.5;
4 : Asp:=50.3;
end;
End;

if ComboBox4.ItemIndex = 1
Then Begin

if combobox2.ItemIndex = 0
then begin

Combobox3.items.add('6.4 mm');
Combobox3.items.add('7.9 mm');
Combobox3.items.add('9.5 mm');
Combobox3.items.add('11.0 mm');
Combobox3.items.add('12.7 mm');
Combobox3.items.add('15.2 mm');


case ComboBox3.ItemIndex of
0 : Asp:=24.5;
1 : Asp:=37.4;
2 : Asp:=52.3;
3 : Asp:=71.0;
4 : Asp:=94.2;
5 : Asp:=138.7;
end;
end
Else begin

Combobox3.items.add('9.5 mm');
Combobox3.items.add('11.0 mm');
Combobox3.items.add('12.7 mm');
Combobox3.items.add('15.2 mm');

case ComboBox3.ItemIndex of
0 : Asp:=54.8;
1 : Asp:=74.2;
2 : Asp:=98.7;
3 : Asp:=140.4;
end;
end;
End;
Memo1.Lines.add('A Area escolhida é de: '+ (FormatFloat('0.00',Asp)+' mm'));
end;


Entretanto, note que o problema ainda permanece... o Combobox3 não deixa ficar selecionado o item que eu quero...
E se eu retirar o item "clear" lá no começo... ele até deixa... mas ai ele fica rotinamente acrescentando as linhas do combobox3.

Consegue me ajudar com o caso?
Abração
GOSTEI 0
POSTAR