Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 10-11-2014
Avatar de danielmj
danielmj danielmj is offline
Miembro
 
Registrado: jun 2011
Posts: 383
Poder: 13
danielmj Va por buen camino
¿como obtener dos items seleccionados en un checklistbox?

Hola de nuevo,

Tengo un checkListBox con 20 opciones, por otro lado, tengo dos labels en las que quiero meter los dos items seleccionados del checklistBox.
Hasta ahora tengo este codigo:

Código Delphi [-]
for i:= 0 to chName.Items.Count -1 do
    begin
      if chName.Checked[i] then
        begin
          if chName.State[i] = cbChecked then
            label7.Caption:= QuotedStr(chName.Items[i]);
            label8.Caption:= QuotedStr(chName.Items[i]);
            j:= j+1;
        end;
        if j > 2 then
          begin
            if Application.MessageBox ('Sólo pueden seleccionarse dos colores','Atención',mb_iconInformation+
            mb_Ok) = idOk then
            chName.Checked[i]:= false;
            chName.Selected[i]:= false;
            exit
          end;
    end;

El problema es que en los dos labels, me muestra el primer item que selecciono obviando el segundo. Por otra parte, como veis controlo que no se seleccionen mas de dos elementos, si fuerzo ese punto, en las etiquetas mete el tercer elemento que se intenta seleccionar antes de ser impedido, machacando el valor que ya tuviese.

Dicho de otro modo, de los 20 elementos, quiero seleccionar 2 y que los meta en dos etiquetas, un elemento en cada una.
¿Alguna idea o sugerencia?

Saludos.
__________________
La juventud pasa, la inmadurez se supera, la ignorancia se cura con la educación, y la embriaguez con la sobriedad, pero la estupidez dura para siempre. Aristofanes.
Responder Con Cita
  #2  
Antiguo 10-11-2014
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola danielmj.

Código Delphi [-]
...
procedure TForm1.CheckListBox1ClickCheck(Sender: TObject);
var
  i, c: Integer;
begin
  c:= 0;
  with TCheckListBox(Sender) do
  begin
    for i:= Items.Count -1 downto 0 do
      if State[i] = cbChecked then Inc(c);
    if c > 2 then
    begin
      Checked[ItemIndex]:= False;
      raise Exception.Create('Sólo pueden seleccionarse dos colores');
    end;
  end;
end;

procedure TForm1.btnSendToLabelsClick(Sender: TObject);
var
  i,c: Integer;
  s: array[0..1] of string;
begin
  with CheckListBox1 do
  begin
    c:= 0;
    for i:= 0 to Items.Count-1 do
      if Checked[i] then
      begin
        s[c]:= QuotedStr(Items[i]);
        Inc(c);
      end;
  end;
  Label7.Caption:= s[0];
  Label8.Caption:= s[1];
end;

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #3  
Antiguo 10-11-2014
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
El siguiente ejemplo funciona en tiempor real, mientras su pulsa en los items:

Código Delphi [-]
procedure TForm1.FormCreate(Sender: TObject);
begin
  Label7.Caption:= '';
  Label8.Caption:= '';
end;


procedure TForm1.chNameClickCheck(Sender: TObject);
var
  i, j: integer;
begin
  j:=  0;
  for i:= 0 to chName.Items.Count -1 do if chName.Checked[i] then inc(j);

  if j > 2 then
  begin
    Application.MessageBox ('Sólo pueden seleccionarse dos colores','Atención',mb_iconInformation + mb_Ok);
    chName.Checked[chName.ItemIndex]:= false;
  end;

  if chName.Checked[chName.ItemIndex] then
  begin
    if label7.Caption = '' then
      label7.Caption:= QuotedStr(chName.Items[chName.ItemIndex])
    else if label8.Caption = '' then
      label8.Caption:= QuotedStr(chName.Items[chName.ItemIndex]);
  end
  else
  begin
    if label7.Caption = QuotedStr(chName.Items[chName.ItemIndex]) then label7.Caption:= '';
    if label8.Caption = QuotedStr(chName.Items[chName.ItemIndex]) then label8.Caption:= '';
  end;
end;


Saludos.
Responder Con Cita
  #4  
Antiguo 10-11-2014
Avatar de danielmj
danielmj danielmj is offline
Miembro
 
Registrado: jun 2011
Posts: 383
Poder: 13
danielmj Va por buen camino
Muchas gracias a los dos, yo lo tenía ahí pero no terminaba de arrancar, por ejemplo a mi me salía "amarillo,amarillo,azul", es decir, repite uno de los elementos y luego concatenaba el segundo. Ahora ya va perfecto.

Gracias.
__________________
La juventud pasa, la inmadurez se supera, la ignorancia se cura con la educación, y la embriaguez con la sobriedad, pero la estupidez dura para siempre. Aristofanes.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
¿Como llenar un listview con datos seleccionados de un DBlookuplistbox? eduarcol OOP 1 11-08-2007 02:47:06
Color en los Items de un CheckListBox xidqisx OOP 2 19-01-2007 16:54:41
Color en los Items de un CheckListBox xidqisx Gráficos 1 19-01-2007 11:24:32
Como tratar multiples seleccionados en DBGrid vivamotos C++ Builder 1 14-09-2006 18:26:40
Como llenar un combo con campos seleccionados ? Luis Conexión con bases de datos 2 29-09-2004 08:50:04


La franja horaria es GMT +2. Ahora son las 01:56:37.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi