50 - VCL - controles Standard: TListBox

Otra componente disponible en la pestaña "Standard" de la paleta de componentes es el TListBox.

La componente TListBox nos muestra una lista de elementos de la cual podemos seleccionar uno de ellos y verificar luego cual está seleccionado.

La propiedad ItemIndex almacena un -1 si no hay seleccionado un elemento y en el caso de estar seleccionado almacena la posición del elemento seleccionado.

Igual que la componente TComboBox debemos cargar la lista de string en la propiedad Items.

Problema 1:

Confeccionar un programa que muestre en un control de tipo TListBox una lista de artículos.
Cuando se presiona un botón mostrar en el título del formulario el producto seleccionado del TListBox. Validar que se encuentre seleccionado un elemento.

TListBox VCL Delphi

Proyecto166

unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;

type
  TForm1 = class(TForm)
    ListBox1: TListBox;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  if ListBox1.ItemIndex <> -1 then
    Caption := ListBox1.Items[ListBox1.ItemIndex];
end;

end.

Verificamos si está seleccionado un item del ListBox controlando que la propiedad ItemIndex del ListBox1 sea distinta a -1, luego accedemos a la propiedad Items del ListBox1 en la posición indicada por ItemIndex:

procedure TForm1.Button1Click(Sender: TObject);
begin
  if ListBox1.ItemIndex <> -1 then
    Caption := ListBox1.Items[ListBox1.ItemIndex];
end;

Problema 2:

Confeccionar un programa que muestre en un control de tipo TListBox una lista de artículos y que permita la selección de varios al mismo tiempo.
Cuando se presiona un botón agregar en un segundo TListBox los elementos que se encuentran seleccionados en el primero.

TListBox VCL Delphi

Debemos inicializar la propiedad MultiSelected con el valor true del primer TListBox.

Proyecto167

unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;

type
  TForm1 = class(TForm)
    ListBox1: TListBox;
    Button1: TButton;
    ListBox2: TListBox;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  f: Integer;
begin
  for f:=0 to ListBox1.Items.Count - 1 do
    if ListBox1.Selected[f] then
      ListBox2.Items.Add(ListBox1.Items[f]);
end;

end.

La clase TListBox tiene una propiedad llamada Selected que almacena para cada posición del TListBox si dicho elemento se encuentra seleccionado o no.
Mediante un for recorremos y analizamos cada elemento del ListBox1 verificando si se encuentra seleccionado en dicho caso procedemos a añadirlo al segundo ListBox:

procedure TForm1.Button1Click(Sender: TObject);
var
  f: Integer;
begin
  for f:=0 to ListBox1.Items.Count - 1 do
    if ListBox1.Selected[f] then
      ListBox2.Items.Add(ListBox1.Items[f]);
end;

Problema propuesto

  • Mostrar en un TListBox los string 'sumar', 'restar', 'multiplicar' y 'dividir'. Permitir seleccionar varios elementos del TListBox.
    Por otro lado permitir cargar dos enteros y mostrar el resultado de las operaciones seleccionadas. TListBox VCL Delphi

Solución
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;

type
  TForm1 = class(TForm)
    ListBox1: TListBox;
    Label1: TLabel;
    Label2: TLabel;
    Edit1: TEdit;
    Edit2: TEdit;
    Button1: TButton;
    Label3: TLabel;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  valor1: Integer;
  valor2: Integer;
  f: Integer;
  resultado: Integer;
begin
  Label3.Caption := '';
  valor1 := StrToInt(Edit1.Text);
  valor2 := StrToInt(Edit2.Text);
  for f:=0 to ListBox1.Items.Count - 1 do
    if ListBox1.Selected[f] then
    begin
      if ListBox1.Items[f] = 'sumar' then
      begin
        resultado := valor1 + valor2;
        Label3.Caption := Label3.Caption + 'La suma es=' +IntToStr(resultado) + ' ';
      end;
      if ListBox1.Items[f] = 'restar' then
      begin
        resultado := valor1 - valor2;
        Label3.Caption := Label3.Caption + 'La resta es=' +IntToStr(resultado) + ' ';
      end;
      if ListBox1.Items[f] = 'multiplicar' then
      begin
        resultado := valor1 * valor2;
        Label3.Caption := Label3.Caption + 'El producto es=' +IntToStr(resultado) + ' ';
      end;
      if ListBox1.Items[f] = 'dividir' then
      begin
        resultado := valor1 div valor2;
        Label3.Caption := Label3.Caption + 'La división es=' +IntToStr(resultado) + ' ';
      end;
    end;
end;

end.