![]() |
Probleme beim zuweisen von StringList zu RadioButton
Hi Leute. :-)
Bin absoluter Anfänger in Sachen Programmierung und lerne es jetzt in meiner Ausbildung. Ich habe da 'ne ganze Menge Frage, aber hier erstmal die erste: Ich habe in einem Formular ein Array[0..4] of TRadioButton Nun möchte ich einem Radiobutton einen string aus einer Stringlist zuweisen. Ich habe folgendes (nur eins von vielen) probiert: RbAntw[4].caption := (FragenList.Strings[6]); Wenn ich das Programm starte, dann gibt es erstmal keine Fehlermeldung, jedoch wenn das Programm an genau diese Stelle kommt, gibt er einen Laufzeitfehler aus. Wie kann ich es anstellen, dass ich den Text an einer bestimmten Stelle in den RadioButton laden kann? Vielen Dank im Voraus allshoot |
Re: Anfänger sucht....
Herzlich Willkommen in der Delphi-PRAXiS! :party: :firejump:
hast du eigentlich Instanzen der TRadioButtons erzeugt? Also ein
Delphi-Quellcode:
?
RbAntw[4] := TRadioButton.Create(Form1);
edit: :oops: |
Re: Anfänger sucht....
Zitat:
Delphi-Quellcode:
RbAntw[4] := TRadioButton.Create(Form1);
|
Re: Anfänger sucht....
Zitat:
Ist jedenfalls korrigiert ;) |
Re: Anfänger sucht....
Was für einen Fehler gibt er denn aus?
|
Re: Anfänger sucht....
Hi, thx fürs antworten.
Ja habe ich, die RadioButtons werden auch, nachdem ich bei ihnen ein Caption von Hand zugewiesen habe, im Formular angezeigt, ich kann sie anwählen, wenn checked = true ist auch den Inhalt abspeichern. Geht alles, aber das zuweisen eines Strings aus einer StringList geht einfach nicht!? allshoot |
Re: Anfänger sucht....
Zitat:
Zum zweiten: Herzlich willkommen in der DP! :dp: Zum dritten (und damit mehr in Richtung Problemlösung :mrgreen:): Es wäre eventuell hilfreich, wenn du die Fehlermeldung mal postest. Hast du die Radiobuttons auch erstellt (wie bereits von malo und spider vermutet)? Beinhaltet die StringList überhaupt genug Werte? Der Index 6 zeigt ja auf das 7 Element der Stringlist (0-basiert), kann es vielleicht sein, daß du nur 6 Items drin hast? //Edit: Ok, das mit dem Erstellen hat sich ja erledigt, aber was mir gerade auffällt: Probier es mal mit
Delphi-Quellcode:
RbAntw[4].caption := (FragenList.Items[6]);
|
Re: Anfänger sucht....
Noch eine mögliche Fehlerquelle:
Ich nehme mal an, dass FragenList eine ListBox o.ä. ist. Kann es sein, dass du dort auf den sechsten eintrag zugreifen willst? Denn dann müsstest du Fragen.Items[5] nehmen, da das erste Item den Index 0 hat. |
Re: Anfänger sucht....
Hallo,
FragenList ist eine StringList, in die ca 140 Items reingeladen wurden, das müsste eigentlich reichen. Als Fehlermeldung gibt er folgendes aus: Exception der Klasse EAccessViolation Zugriffverletzung bei Adresse 004584D9 in Modul 'FuGerBed.exe' Lesen von Adresse 00000000'. Prozess wurde angehalten.... Hoffed dass das reiecht? THX allshoot |
Re: Anfänger sucht....
Zeig bitte mal die Codezeilen, in denen du den Arrayinhalt zuweist. Ich verwette meine 2 Cent, die ich gerade auf dem Boden gefunden habe, darauf, dass dort der Fehler liegt.
|
Re: Anfänger sucht....
Ich schätze mal, dass du das hier sehen willst?!:
Delphi-Quellcode:
Das zuweisen direkt mit einem String geht, jedoch das mit der Stringlist nicht?????RbAntw[0].caption := 'A'; // -------------------- RbAntw[1].caption := 'B'; // RbAntw[2].caption := 'C'; // Belegen der Antwortbuttons mit Text!! RbAntw[3].caption := 'D'; // RbAntw[4].caption := (Fragenlist.strings[6]); //---------------------- allshoot |
Re: Anfänger sucht....
Die Fragenlist hast du ebenfalls erzeugt?
|
Re: Anfänger sucht....
Also:
- du initialisierst jeden TRadiobutton - du initialisierst die Stringlist wie schreibst du denn in die Stringlist? (vielleicht ist es ja das, unwahrscheinlich) |
Re: Anfänger sucht....
Jap, sie wird geladen und ich kann sie so
Delphi-Quellcode:
auch wieder abspeichern, ist dann eine genau Kopie davon.
Fragenlist := TStringList.Create;
Fragenlist.LoadFromFile('Fragen.txt'); Fragenlist.SaveToFile('Fragen2.txt'); Die Textdatei besteht dann aus einzelnen unterschielich langen Zeilen mit CR und LF. allshoot |
Re: Anfänger sucht....
Ich möchte gerade noch einmal darauf hinweisen:
Zitat:
|
Re: Anfänger sucht....
Editieren? Habe den Code doch als Code gekennzeichnet, noch mehr??
allshoot |
Re: Anfänger sucht....
Zitat:
|
Re: Anfänger sucht....
Zitat:
|
Re: Anfänger sucht....
Delphi-Quellcode:
Funktioniert einwandfrei...
procedure TForm1.Button1Click(Sender: TObject);
var Fragenlist : TStringlist; RbAntw : Array[0..4] of TRadioButton; ii : Integer; begin For ii := Low(RbAntw) to High(RbAntw) do RbAntw[ii] := TRadioButton.Create(Form1); Fragenlist := TStringList.Create; Fragenlist.LoadFromFile('C:\Fragen.txt'); Fragenlist.SaveToFile('C:\Fragen2.txt'); try RbAntw[0].Caption := 'A'; RbAntw[1].Caption := 'B'; RbAntw[2].Caption := 'C'; RbAntw[3].Caption := 'D'; RbAntw[4].Caption := Fragenlist.Strings[6]; finally Fragenlist.Free; For ii := Low(RbAntw) to High(RbAntw) do (RbAntw[ii] as TRadioButton).Free; end; end; |
Re: Probleme beim zuweisen von StringList zu RadioButton
Danke ken_jones,
aber nimmt er nicht an, kommt die selbe Fehlermeldung, wenn ich meinen Quellcode so anpasse. Ist wohl etwas viel Text hier, aber ich poste mal das kompl. Ding:
Delphi-Quellcode:
Vielleicht (oder bestimmt) erkennt einer den Bug.
type
TForm1 = class(TForm) LbText: TLabel; Ikreuz: TImage; BtWeiter: TButton; LbName: TLabel; LbDstGrd: TLabel; LbEinheit: TLabel; LbTE: TLabel; EdName: TEdit; EdDstGrd: TEdit; EdEinheit: TEdit; EdTE: TEdit; LbPK: TLabel; EdPK: TEdit; procedure BtWeiterClick(Sender: TObject); procedure BtSchliessenClick(Sender: TObject); procedure Lb_change (name : TLabel; Beschriftung : string; l, t, w, h :integer); {procedure n_RB_create (Anzahl, L, T, Abstand, W, H : integer);} procedure AntwSpeichern; procedure FragenLaden; private public Zaehler:integer; FragenList : tStringlist; end; var Form1: TForm1; RbAntw: array[0..4] of TRadioButton; // AntwortButtons erstellen Druckform : String; // Abgelegte Prüfung speichern Pruefung : TStringList; // Zum abspeichern der eingegeben Daten implementation uses UFuGerBed2; {$R *.DFM} {---------------------------Laden des Fragekatalogs----------------------------} procedure TForm1.Fragenladen; begin Fragenlist := TStringList.Create; Fragenlist.LoadFromFile('Fragen.txt'); Fragenlist.SaveToFile('Fragen2.txt'); end; {---------------------------Abfragen der Radio-Buttons-------------------------} procedure TForm1.AntwSpeichern; var i : integer; begin Pruefung.Add(LbText.Caption); for i := 0 to 4 do begin If RbAntw[i].Checked then begin Pruefung.Add(RbAntw[i].caption); Pruefung.Add(' '); Pruefung.SaveToFile(Druckform); end; end; end; {{---------------------------Erstellen von n RadioButtons---------------------- procedure TForm1.n_RB_create (Anzahl, L, T, Abstand, W, H : integer); var NewButton : TRadioButton; i : integer; begin For i:=0 to ((Anzahl)-1) do begin NewButton := TRadioButton.create(Form1); With NewButton Do begin Parent := Form1; Left := (L); Top := (T + (i * Abstand)); Width := (W); Height := (H); Name := 'RbAntw' + inttostr(i+1); Caption := 'Antwort' + inttostr(i+1); visible := true; end; end; end; } {---------------------------Ändern eines beliebigen Labels---------------------} procedure TForm1.Lb_change (name : TLabel; Beschriftung : string; l, t, w, h :integer); begin with name do begin left := (l); top := (t); width := (w); height := (h); caption := Beschriftung; end; end; {---------------------------Schließen-Knopf------------------------------------} procedure TForm1.BtSchliessenClick(Sender: TObject); begin AntwSpeichern; pruefung.Free; close; end; {---------------------------Weiter-Knopf---------------------------------------} procedure TForm1.BtWeiterClick(Sender: TObject); var i : integer; // Zählvariable für die Schleifen begin if zaehler = 2 then begin AntwSpeichern; Lb_change(LbText, 'Frage 1.274: An welchem Schalter mache ich die Annanas?', 56, 48, 761, 137); RbAntw[0].caption := 'A'; // -------------------- RbAntw[1].caption := 'B'; // RbAntw[2].caption := 'C'; // Belegen der Antwortbuttons mit Text!! RbAntw[3].caption := 'D'; // RbAntw[4].caption := 'E'; //---------------------- Form2.visible := true; BtWeiter.Caption := 'Schließen'; //Text auf dem "Weiter"-Button ändern BtWeiter.OnClick := BtSchliessenClick; //Hier festlegen des neuen Handelns end; // beim klicken auf den Button if zaehler=1 then // Eingabeseite Name begin Druckform := ((EdName.Text) + '.txt');//Legt Namen der Datei fest Pruefung := TStringlist.Create; // Erstellen eine TStringList try pruefung.Add(LbName.Caption + ' ' + EdName.Text); //---------------- pruefung.Add(LbDstGrd.caption + ' ' + EdDstGrd.Text); // pruefung.add(LbPK.caption + ' ' + EdPK.Text); // pruefung.Add(LbEinheit.caption + ' ' + EdEinheit.Text); // Abspeichern der Inhalte pruefung.Add(LbTE.caption + EdTE.Text); // der Inhalte der Edit-Fenster pruefung.Add(' '); // pruefung.Add(' '); // pruefung.Add(' '); // pruefung.SaveToFile(Druckform); //---------------- finally {pruefung.Free; // Löschen der TStringList} end; Lb_change(LbText, 'Frage', 56, 48, 761, 137); // Ändern eines beliebigen Labels LbText.Font.Style := []; LbName.free; //------------------------- EdName.free; // LbDstGrd.free; // EdDstGrd.free; // LbPK.free; // EdPK.Free; //Löschen der Eingabe-Felder LbEinheit.free; // EdEinheit.free; // LBTE.free; // EdTE.free; //------------------------- {----------Erstellen der Antwortbuttons----------} for i := 0 to 4 do begin RbAntw[i] := TRadioButton.create(Form1); //Erstellen des jeweiligen Buttons in Array[i] with RbAntw[i] do begin parent := Form1; // Besitzer festlegen Left := 112; // | Top := 220+ (i * 70); // |Größe und Position Width := 601; // |festlegen! Height := 41; // | Caption := 'Antw' + inttostr(i+1); // Angezeigter Text zu dem Button festlegen! end; end; inc(zaehler); end; if zaehler=0 then //Startseite begin Lb_change(LbText, 'Bitte geben sie hier die geforderten Daten ein:', 172, 96, 513, 27); // Ändern eines beliebigen Labels LbText.Font.Style := [fsunderline]; // Text des Labels wird unterstrichen!! Ikreuz.free; // Bild mit dem Kreuz löschen LbName.Visible := true; //---------------------------------------- EdName.Visible := true; // LbDstGrd.Visible := true; // EdDstGrd.Visible := true; // LbPK.visible := true; // Labels + Edits der EdPK.Visible := true; // Namensabfrage LbEinheit.Visible := true; // sichtbar machen EdEinheit.Visible := true; // LBTE.Visible := true; // EdTE.Visible := true; //---------------------------------------- inc(zaehler); end; end; end. THX allshoot |
Re: Probleme beim zuweisen von StringList zu RadioButton
So wie ich aus den vorherigen Fragen schliesse wolltst du den folgenden Code aus dem aktuellen Source,
von:
Delphi-Quellcode:
auf
if zaehler = 2 then
begin AntwSpeichern; Lb_change(LbText, 'Frage 1.274: An welchem Schalter mache ich die Annanas?', 56, 48, 761, 137); RbAntw[0].caption := 'A'; // -------------------- RbAntw[1].caption := 'B'; // RbAntw[2].caption := 'C'; // Belegen der Antwortbuttons mit Text!! RbAntw[3].caption := 'D'; // RbAntw[4].caption := 'E'; //---------------------- // Form2.visible := true; BtWeiter.Caption := 'Schließen'; //Text auf dem "Weiter"-Button ändern BtWeiter.OnClick := BtSchliessenClick; //Hier festlegen des neuen Handelns end;
Delphi-Quellcode:
ändern. Dann hats aber geknallt.
if zaehler = 2 then
begin AntwSpeichern; Lb_change(LbText, 'Frage 1.274: An welchem Schalter mache ich die Annanas?', 56, 48, 761, 137); RbAntw[0].caption := 'A'; // -------------------- RbAntw[1].caption := 'B'; // RbAntw[2].caption := 'C'; // Belegen der Antwortbuttons mit Text!! RbAntw[3].caption := 'D'; // RbAntw[4].caption := Fragenlist.Strings[6]; //---------------------- // Form2.visible := true; BtWeiter.Caption := 'Schließen'; //Text auf dem "Weiter"-Button ändern BtWeiter.OnClick := BtSchliessenClick; //Hier festlegen des neuen Handelns end; Wenn das so ist, dann liegts daran, dass vor dem Zuweisen die Stringlist hat eben doch nicht erstellt ist, denn dazu fehlt dann der Prozeduraufruf Fragenladen. Folgendes müsste dann also gehen:
Delphi-Quellcode:
if zaehler = 2 then
begin AntwSpeichern; FragenLaden; Lb_change(LbText, 'Frage 1.274: An welchem Schalter mache ich die Annanas?', 56, 48, 761, 137); RbAntw[0].caption := 'A'; // -------------------- RbAntw[1].caption := 'B'; // RbAntw[2].caption := 'C'; // Belegen der Antwortbuttons mit Text!! RbAntw[3].caption := 'D'; // RbAntw[4].caption := FragenList.Strings[6] ; //---------------------- // Form2.visible := true; BtWeiter.Caption := 'Schließen'; //Text auf dem "Weiter"-Button ändern BtWeiter.OnClick := BtSchliessenClick; //Hier festlegen des neuen Handelns end; |
Re: Probleme beim zuweisen von StringList zu RadioButton
THX ken_jones,
so hat es gefunzt. :hello: Ich hatte die Prozedur FragenLaden im Hauptprogramm aufgerufen, direkt nach Application.Run . Die SL wurde geladen und auch wieder gespeichert, aber wieso war sie beim zuweisen zum RadioButton nicht verfügbar? allshoot |
Re: Probleme beim zuweisen von StringList zu RadioButton
Nach Application.Run ?
Application.Run startet deine App (klingt logisch) und erst nach dem beenden der App gehts dort weiter. D.h. du hast die Stringlist beim beenden des Programmes erstellt, und zur Laufzeit war sie nicht vorhanden. Wenn du sowas vor dem App Start machen willst, muss das VOR das Application.Run, oder auch in die Initialize Sektion. Greets! |
Re: Probleme beim zuweisen von StringList zu RadioButton
Ok,
habe es kapiert! Danke an alle, die hier mitgeholfen haben! Bis zum nächsten Beitrag! allshoot |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:22 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