Fórum Combobox não fixa o valor escolhido em tempo de execução #587255

26/10/2017

0

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

Responder

Post mais votado

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!

Flavio Ferreira

Flavio Ferreira
Responder

Gostei + 1

Mais Posts

27/10/2017

Gabriel Baltazar

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
Responder

Gostei + 0

27/10/2017

Joao Df

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
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar