Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   problemas con combobox (https://www.clubdelphi.com/foros/showthread.php?t=30037)

gelitus 07-02-2006 14:51:10

problemas con combobox
 
Estoy teniendo problemas para agregar items a un combobox, este es el codigo:

Código Delphi [-]
unit Principal;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls,Datos;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Label1: TLabel;

    procedure Button1Click(Sender: TObject);


  private
    { Private declarations }
  public
  end;
const
  n:integer =40;
var
  Form1: TForm1;
  clases: array[1..5] of string;
  i:integer;

implementation


{$R *.dfm}



procedure TForm1.Button1Click(Sender: TObject);
begin
close;
end;


begin
  clases[1]:='Asietos';
  clases[2]:='Caño de Asiento';
  clases[3]:='Collar izq';
  clases[4]:='Cuadro';
  clases[5]:='Orquilla';

  for i:=1 to 5 do
    begin
      Form1.ComboBox1.Items.Add(clases[i]);
    end;





end.

Cuando complilo me salta el siguiente error:

Project Project1.exe raised exception class EAccessViolation with message 'Access Violation at address 00499B54 in module 'Project1.exe'. Read of address 00000304'. Process stopped. Uses Step or runn to continue.

Si alguien tiene idea de que estoy haciendo mal, o tiene otra forma de hacerlo, agradeceria su ayuda.

Jose_Pérez 07-02-2006 15:03:37

Hola Gelitus:

Dos preguntas para entender mejor el problema:

1.- ¿Cuando se produce el error, al compilar o cuando pulsas Button1?

2.- ¿Exactamente que hace el programa cuando pulsas el Button1; un close (del TForm ¿?) o rellenar el ComboBox?

vtdeleon 07-02-2006 15:52:18

Saludos


Cuando se crea el ComboBox1?????:confused: No lo veo creado en ningun lado!

gelitus 07-02-2006 16:47:30

Aca esta el cod mas simple, solo con el combobox:
Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    ComboBox1: TComboBox;
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  clases:array[1..5] of string;
  i:integer;

implementation

{$R *.dfm}
begin
  clases[1]:='Asietos';
  clases[2]:='Caño de Asiento';
  clases[3]:='Collar izq';
  clases[4]:='Cuadro';
  clases[5]:='Orquilla';

  for i:=1 to 5 do
    begin
      Form1.ComboBox1.Items.Add(clases[i]);
    end;
end.

El error se produce cuando presiono F9 para compilar.

Si escribo algo como:

Código Delphi [-]
     Form1.ComboBox2.Items:= Form1.ComboBox1.Items


No tengo idea que puede ser...

roman 07-02-2006 17:02:10

Nosotros tampoco. ¿Cuál es el error que se produce al oprimir F9? ¿Quién es ComboBox2 y qué pasa cuando escribes algo así?

// Saludos

vtdeleon 07-02-2006 17:04:56

Saludos

Copia y pega el codigo real que tienes por que el anterior no tiene procedimiento ni na.... Falta algo!

roman 07-02-2006 17:21:55

Cita:

Empezado por vtdeleon
Falta algo!

¡Ahhh! Pues creo que ese es precisamente el problema, ¡que no falta nada!, ja, ja. De verdad Troi, te lo juro, esa cosa compila. Pero es que el begin que aparentemente no tiene procedimiento, es el begin de la unidad y funciona aparentemente como una sección initialization; y claro, los objetos aún no han sido construidos para cuando se pasa por ahí.

// Saludos

gelitus 07-02-2006 17:42:21

Tenias razon roman, era problema de que intentaba cargar el combobox cuando aun no estaba creado en el formulario. Pero ahora me surge otra pregunta: en que momento o evento o donde debo agregarle los items al combobox?????

roman 07-02-2006 17:48:59

El evento OnCreate del formulario tiene un nombre particularmente sugerente ¿no crees? ;)

// Saludos

vtdeleon 07-02-2006 23:52:45

Saludos
Cita:

Empezado por roman
Pero es que el begin que aparentemente no tiene procedimiento, es el begin de la unidad y funciona aparentemente como una sección initialization;...

:eek::eek::eek: Ooooh, esto no me la sabia.:o

yhoda 15-05-2007 23:04:57

yo hize algo similar pero el cada vez que selecciono el combobox se agregan todos los valore sde nuevo, como lo puedo solucionar?

Caral 15-05-2007 23:19:10

Hola
abria que ver como lo estas haciendo, no crees, similar es muchas cosas.
El codigo que lo le funciono a gelitus, era por una simple mala colocacion del begin.
En tu caso, que sera?.
Analiza este:
Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

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

const
  n:integer =40;
var
  Form1: TForm1;
  clases: array[1..5] of string;
  i:integer;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
   clases[1]:='Asietos';
  clases[2]:='Caño de Asiento';
  clases[3]:='Collar izq';
  clases[4]:='Cuadro';
  clases[5]:='Orquilla';

  for i:=1 to 5 do
    begin
      Form1.ComboBox1.Items.Add(clases[i]);
    end;
end;
es el mismo que el de arriba solo que ordenado, pruebalo.
Saludos

douglas 23-10-2007 23:58:06

Cita:

Empezado por yhoda (Mensaje 201330)
yo hize algo similar pero el cada vez que selecciono el combobox se agregan todos los valore sde nuevo, como lo puedo solucionar?

okay si estas trabajando ezsa funcion en un boton, y no mandas una orden de limpiado al inicio de los procedimientos, el programa lo que hara es colocar bajado de todo lo que tenga el combobox, por eso es que se te repiten y repiten cada vez que presionas el boton, trabaja algo asi

Código PHP:

procedure TForm1.Button1Click(SenderTObject);
begin
       combobox1
.clear;
       
cosas[1]:='sillas';
       
cosas[2]:='mesas';
       
cosas[3]:='platos';
       
cosas[4]:='cuchillos';
       
cosas[5]:='tenedores';
       for 
i:=1 to 5 do 
       
begin 
              combobox1
.items.add(cosas[i]);
       
end;
end

de esta manera cada ves que preciones el boton, inmediatamente limipara tu combobox, y luego lo rellenara con la informacion que necesitas, espero que te sirva la informacion y cualquier cosa que ncesites no dudes en pedir ayuda.


La franja horaria es GMT +2. Ahora son las 03:56:06.

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