![]() |
Dynamischen Wert ermitteln
Hallo zusammen
Ich habe 8 Edit Felder. Name: edt_SCS1IPAdresse und edt_SCS2IPAdresse usw. Die Zahl 1-8 ist im Namen enthalten. Wie kann ich nun den Wert dieser Felder in eine Variable (Adresse) setzen mit diesem Code:
Delphi-Quellcode:
Ich erhalte bei der letzten Zeile immer folgenden Fehler:
if cb_RDCServer.Text <> '' then // hier steht dann z.B: 8 darin
begin for i := 0 to ComponentCount - 1 do begin if (Components[i] is TEdit) and (Components[i].Name = 'edt_SCS' + cb_RDCServer.Text + 'IPAdresse' ) then begin with (Components[i] as TEdit) do begin adresse := (Components[i] as Tedit).Text; end; end; end; Listenindex überschreitet das Maximum (1691). Ich nehme an, dass ich bei meinem Code einen Überlegungsfehler befindet. Danke für Eure Hilfe. :-) Gruss Joki. |
AW: Dynamischen Wert ermitteln
Ich verstehe Deinen Code nicht ganz, zumal adresse ja immer wieder überschrieben wird. Wäre
![]() |
AW: Dynamischen Wert ermitteln
Ich sehe an dem Code nicht warum es zu diesem Fehler kommen könnte.
|
AW: Dynamischen Wert ermitteln
Danke für Deine schnelle Antwort.
Adresse soll genau 1 mal den entsprechenden Wert des gewählten edit-Feldes bekommen. Ich gehe davon aus, dass die obige Abprüfung ja nur gerade einmal passt, und somit sollte meine Variable Adresse den richtigen Wert bekommen. Mit diesem Componets[i] Codes kenne ich mich nicht so gut aus... Danke! |
AW: Dynamischen Wert ermitteln
Ich würde noch ein Break reinmachen, wenn du einen Treffer hattest, dann sparst dir den Rest der Schleife.
|
AW: Dynamischen Wert ermitteln
Durch Dein With versuchst Du faktisch folgenden Zugriff
Delphi-Quellcode:
greifst also auf Components von (Components[i] as TEdit) zu ....
(Components[i] as TEdit).(Components[i] as Tedit).Text
|
AW: Dynamischen Wert ermitteln
Delphi-Quellcode:
const
EDITNAME = 'edt_SCS%sIPAdresse'; var AComponent: TComponent; ... if cb_RDCServer.Text <> '' then // hier steht dann z.B: 8 darin begin AComponent := FindComponent(Format(EDITNAME, [cb_RDCServer.Text])); if Assigned(AComponent) then if AComponent is TEdit then adresse := TEdit(AComponent).Text; end; |
AW: Dynamischen Wert ermitteln
Richtig Bummi, dieses with ist doch immer wieder gemein, ich weiß warum ich das nie benutze.
@DeddyH : Ein FindComponent schleift auch über ComponentCount, das ist grad egal. |
AW: Dynamischen Wert ermitteln
Zitat:
Delphi-Quellcode:
:thumb:
with
|
AW: Dynamischen Wert ermitteln
mmm dann soll also der ganze "with ... do" Code weg?
Und direkt adresse := (Components[i] as Tedit).Text; geschrieben werden? Wenn ja erscheint der selbe Fehler... :-( |
AW: Dynamischen Wert ermitteln
Zitat:
[edit] Außerdem stimmt die Aussage so nicht, FindComponent tut schon ein wenig mehr, wirf mal einen Blick in die Classes.pas, da wird beim ersten Aufruf eine Liste aufgebaut und sortiert, damit Folgeaufrufe schneller vonstatten gehen. [/edit] |
AW: Dynamischen Wert ermitteln
Vielen Dank an alle.
Ohne "With do" klappt es nun! Der Tipp war super! Danke vielmals! Gruss Jerry |
AW: Dynamischen Wert ermitteln
Zitat:
|
AW: Dynamischen Wert ermitteln
Liste der Anhänge anzeigen (Anzahl: 1)
Und der ganze Code wäre überflüssig, wenn man sich dazu verleiten ließe, die Daten nicht in den Controls zu speichern.
Delphi-Quellcode:
EDIT: Source und EXE im Anhang
unit FormMain;
interface uses SysUtils, Forms, StdCtrls, Controls, Classes; type TDataItem = record Name : string; Value : string; end; TMainForm = class( TForm ) ComboBox1 : TComboBox; Edit1 : TEdit; Edit2 : TEdit; Edit3 : TEdit; Edit4 : TEdit; Edit5 : TEdit; Edit6 : TEdit; Edit7 : TEdit; Edit8 : TEdit; SelectedValue_Label : TLabel; procedure ControlChange( Sender : TObject ); // OnChange-Event der Controls hiermit verbinden procedure FormShow( Sender : TObject ); private FModelLoading : Boolean; FCurrent : Integer; FData : array [0 .. 7] of TDataItem; procedure DoLoadFromModel; procedure DoSaveToModel; procedure LoadFromModel; procedure SaveToModel; procedure SyncWithModel; public procedure AfterConstruction; override; end; var MainForm : TMainForm; implementation {$R *.dfm} { TMainForm } procedure TMainForm.AfterConstruction; var LIdx : Integer; begin inherited; // Daten vorbereiten for LIdx := Low( FData ) to High( FData ) do FData[LIdx].Name := 'Item ' + IntToStr( LIdx + 1 ); end; procedure TMainForm.ControlChange( Sender : TObject ); begin SyncWithModel; end; procedure TMainForm.DoLoadFromModel; var LIdx : Integer; begin // Combobox mit Werten füllen ComboBox1.Items.BeginUpdate; try ComboBox1.Items.Clear; for LIdx := Low( FData ) to High( FData ) do ComboBox1.Items.Add( FData[LIdx].Name ); finally ComboBox1.Items.EndUpdate; end; ComboBox1.ItemIndex := FCurrent; // Wert der aktuellen Auswahl if FCurrent < 0 then SelectedValue_Label.Caption := '' else SelectedValue_Label.Caption := FData[FCurrent].Value; // Edit-Felder füllen Edit1.Text := FData[0].Value; Edit2.Text := FData[1].Value; Edit3.Text := FData[2].Value; Edit4.Text := FData[3].Value; Edit5.Text := FData[4].Value; Edit6.Text := FData[5].Value; Edit7.Text := FData[6].Value; Edit8.Text := FData[7].Value; end; procedure TMainForm.DoSaveToModel; begin // Auswahl der ComboBox FCurrent := ComboBox1.ItemIndex; // Inhalt der Edit-Felder FData[0].Value := Edit1.Text; FData[1].Value := Edit2.Text; FData[2].Value := Edit3.Text; FData[3].Value := Edit4.Text; FData[4].Value := Edit5.Text; FData[5].Value := Edit6.Text; FData[6].Value := Edit7.Text; FData[7].Value := Edit8.Text; end; procedure TMainForm.FormShow( Sender : TObject ); begin LoadFromModel; end; procedure TMainForm.LoadFromModel; begin if FModelLoading then Exit; FModelLoading := True; try DoLoadFromModel; finally FModelLoading := False; end; end; procedure TMainForm.SaveToModel; begin if FModelLoading then Exit; DoSaveToModel; end; procedure TMainForm.SyncWithModel; begin SaveToModel; LoadFromModel; end; end. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:18 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