Jump to content

Delphi - Programando com Combobox e Edit


Nazir

Postagens Recomendadas

Bom tarde! Em um projeto de clientes e seus horários, gostaria que cada item do Combobox1 (horários) saísse da lista (mas não removê-lo) quando atribuido à caixa Edit1. E depois devolvê-lo para o Combobox quando retirado do Edit1. Obrigado!

Link to comment
Compartilhe em outros sites

Olá Nazir,

Para adicionar ou remover itens no seu combobox via programação você poderia fazer algo assim:

procedure TForm1.btnAdicionarItemComboClick(Sender: TObject);
begin
  if (seuCombobox.Items.IndexOf(seuEditAdicionarCombo.Text) < 0) then
    seuCombobox.Items.Add(seuEditAdicionarCombo.Text);
end;

procedure TForm1.btnRemoverItemComboClick(Sender: TObject);
var
  _idx: integer;
begin
  _idx := seuCombobox.Items.IndexOf(seuEditRemoverCombo.Text);
  if (_idx >= 0) then
    seuCombobox.Items.Delete(_idx);
end;

OBS: Essa lógica foi usando botão, porém você poderia fazer isso no onexit do seu edit.

  • Curtir 1
Link to comment
Compartilhe em outros sites

Perfeita a lógica Junior!!!

Porém, o que eu queria era: 

1 - Dentro do Combobox já tenho os horários pré estabelecidos (ver foto Combobox);

2- Carregar um item do Combobox para o TEdit1;

3 - Ao carregar, o Combobox não apresentaria mais este item, pois estará armazenado em Edit1;

4 - Ao remover ou excluir o item do Edit1, o mesmo retornaria para a caixa Combobox.

Combobox.PNG

Link to comment
Compartilhe em outros sites

Eu penso que você não precisa remover o "valor do combobox", de fato. Apenas controle se ele já foi usado antes. Caso já tenha sido, então, você pode dizer ao código que não use-o mais (para não repetir alguma ação que você já fez antes).

De todo modo, usar um "Edit" como um meio de controle de alguma tarefa, me parece um meio muito frágil, pois, um Edit é um controle genérico que pode receber qualquer valor alfanumerico... Assim, para concluir sua tarefa, você vai precisar de muito código para controle o texto que entra, e o texto que sai do Edit e do ComboBox.

Os eventos mais adequados poderiam ser: OnChange, OnEnter, OnExit... mas e se o usuário sair do Edit com um valor digitado aleatóriamente, e, que não deveria ser "colocado" no ComboBox, etc... 

Eu penso que deste modo ficaria mais fácil de controlar o uso do seu ComboBox e o Edit... naturalmente, você poderia trocar o Edit por um outro controle que não permite a "edição manual", por exemplo, um TLabel ou similar.

procedure TForm1.ComboBox1Change(Sender: TObject);
var
  i: integer;
begin
  i := ComboBox1.ItemIndex;
  // ......... // somente se os texto forem diferente entao faça alguma coisa...
  if (i > -1) and (Edit1.Text <> ComboBox1.Items[i]) then
    Edit1.Text := ComboBox1.Items[i];
end;

// usando um controle não "editável" pelo usuário... por exemplo: TLabel ou um TEdit (read-only)

// para evitar usar valores inválido para o ComboBox, comece com o "TLabel/TEdit = vazio"

procedure TForm1.ComboBox1Change(Sender: TObject);
var
  i           : integer;
  LTextoAntigo: string;
begin
  i := ComboBox1.ItemIndex;
  //
  if (i > -1) then
    begin
      LTextoAntigo   := Edit1.Text; // faz um backup local...
      Edit1.Text := ComboBox1.Items[i];
      //
      ComboBox1.Items.Delete(i); // deleta o item do combobox...
      //
      if (Trim(LTextoAntigo) <> '') then
        ComboBox1.Items.Append(LTextoAntigo); // Items.Insert( n, texto) ou Items.Append( texto )
    end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  // coloque em ordem para melhor visualizacao das opcoes... e ajudar na re-insercao dos items removidos...
  // sem isso, você terá que verificar onde você deseja re-inserir os items que você removeu...
  // ex.: nas propriedades ou aqui no codigo
  ComboBox1.Sorted := true;
  Edit1.ReadOnly := true;
end;

 

Editado por backupnumberum
  • Curtir 2
Link to comment
Compartilhe em outros sites

Crie uma conta ou entre para comentar 😀

Você precisa ser um membro para deixar um comentário.

Crie a sua conta

Participe da nossa comunidade, crie sua conta.
É bem rápido!

Criar minha conta agora

Entrar

Você já tem uma conta?
Faça o login agora.

Entrar agora
×
×
  • Create New...