![]() |
Re: Delphi- Combobox
Ich hab jetzt bissel was versucht, doch die Fehlermeldung erscheint immer noch. Ich muss euch auch dazu sagen, dass ich ein totaler Delphi Noob bin... Könnt ihr mir die Schritte im Einzelnen erklären? Denn so komm ich nicht wirklich weiter...
|
Re: Delphi- Combobox
Zeig doch mal, was Du versucht hast.
|
Re: Delphi- Combobox
Das war mein anfänglicher Quellcode:
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) GroupBox1: TGroupBox; ComboBox1: TComboBox; Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; Label1: TLabel; Label2: TLabel; Label3: TLabel; Button1: TButton; Button2: TButton; Button3: TButton; Label4: TLabel; Label5: TLabel; procedure Button3Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button3Click(Sender: TObject); begin close; end; procedure TForm1.Button2Click(Sender: TObject); var a,b,c:integer; begin a:=strtoint(combobox1.Text); b:=strtoint(edit1.Text); c:=a*b; edit2.Text:=inttostr(c) end; end. Nun siehts so aus, weil ich schon wieder viel gelöscht habe, weil es einfach nicht funzte:
Delphi-Quellcode:
Du hast eine Procedure vorhins geschrieben, wo soll ich die hinmachen? Einfach nur reinschreiben? Das hat ich vorhins auch und es hat dennnoch nicht geklappt...
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) TMyClass = class GroupBox1: TGroupBox; ComboBox1: TComboBox; Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; Label1: TLabel; Label2: TLabel; Label3: TLabel; Button1: TButton; Button2: TButton; Button3: TButton; Label4: TLabel; Label5: TLabel; procedure Button3Click(Sender: TObject); procedure Button2Click(Sender: TObject); private FBezeichnung: string; FZahl: integer; { Private-Deklarationen } public property Bezeichnung: string read FBezeichnung write FBezeichnung; property Zahl: integer read FZahl write FZahl; { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button3Click(Sender: TObject); begin close; end; procedure TForm1.Button2Click(Sender: TObject); var a,b,c:integer; begin a:=strtoint(combobox1.Text); b:=strtoint(edit1.Text); c:=a*b; edit2.Text:=inttostr(c) end; end. |
Re: Delphi- Combobox
Da hast Du aber Einiges durcheinandergeworfen. Zunächst einmal ist die Klasse kein "Teil" des Formulars, sondern eine eigenständige Klasse.
Delphi-Quellcode:
Dann musst Du irgendwann (z.B. bei Klick eines Buttons) diese Klasse instanzieren (d.h. ein Objekt dieser Klasse anlegen) und den Items der ComboBox hinzufügen. Damit ist diese Instanz dann in den Comboboxitems hinterlegt. Beispiel:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TMyClass = class private FBezeichnung: string; FZahl: integer; { Private-Deklarationen } public property Bezeichnung: string read FBezeichnung write FBezeichnung; property Zahl: integer read FZahl write FZahl; { Public-Deklarationen } end; TForm1 = class(TForm) GroupBox1: TGroupBox; ComboBox1: TComboBox; Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; Label1: TLabel; Label2: TLabel; Label3: TLabel; Button1: TButton; Button2: TButton; Button3: TButton; Label4: TLabel; Label5: TLabel; procedure Button3Click(Sender: TObject); procedure Button2Click(Sender: TObject); end;
Delphi-Quellcode:
Spätestens beim Zerstören des Formulars musst Du diese Instanzen dann auch wieder freigeben, sonst produzierst Du ein Speicherleck.
procedure TForm1.ButtonHinzufuegenClick(Sender: TObject);
//Variable des Typs der oben deklarierten Klasse var MyClass: TMyClass; begin //Anlegen der Instanz MyClass := TMyClass.Create; //Ändern der Eigenschaften dieser Instanz MyClass.Bezeichnung := Edit1.Text; MyClass.Zahl := StrToIntDef(Edit2.Text,0); //Speichern der Instanz in den Items ComboBox1.Items.AddObject(MyClass.Bezeichnung {das kann auch ein beliebiger anderer String sein},MyClass); end;
Delphi-Quellcode:
Auf ein bestimmtes Objekt kannst Du über den ItemIndex der ComboBox zugreifen.
procedure TForm1.FormDestroy(Sender: TObject);
var i: integer; begin //von hinten nach vorn durchgehen und Objekte freigeben for i := ComboBox1.Items.Count - 1 downto 0 do ComboBox1.Items.Objects[i].Free; end;
Delphi-Quellcode:
Ich hoffe, das hilft Dir weiter.
procedure TForm1.ComboBox1Change(Sender: TObject);
var aObject: TObject; begin //Objekt holen aObject := ComboBox1.Items.Objects[ComboBox1.ItemIndex]; //ist das Objekt überhaupt zugewiesen? if Assigned(aObject) then //wenn ja, in TMyClass wandeln und das "Zahl"-Feld ausgeben ShowMessage(IntToStr((aObject as TMyClass).Zahl)); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:08 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz