![]() |
Syntax der with-Anweisung
Ich habe gerade
![]()
Delphi-Quellcode:
Bisher habe ich die with-Anweisung in solchen Fällen immer so benutzt:
with ComboBox1, Items do begin
itemindex := IndexOf(edit1.text)
Delphi-Quellcode:
Die Onlinehilfe sagt zum Komma in der with-Anweisung folgendes:
with ComboBox1.Items do begin
itemindex := IndexOf(edit1.text) Zitat:
|
Re: Syntax der with-Anweisung
ItemIndex ist eine Eigenschaft von TCombobox, nicht von TStrings. Daher benötigt auch die Combobox ein With, oder du qualifizierst ItemIndex.
|
Re: Syntax der with-Anweisung
Das würde in diesem Fall bedeuten, dass die with - Anweisung für combobox1 UND für combobox1.items gilt
Edit: ...wie mein Vorredner auch schon geschrieben hat xD |
Re: Syntax der with-Anweisung
Zitat:
|
Re: Syntax der with-Anweisung
.. obwohl mir Angst und Bange wird bei einem solchen Beispiel :cry:
Die einzig korrekte Anwendung der with-Anweisung für obiges Beispiel lautet:
Delphi-Quellcode:
sieht elleganter aus, führt zu keinen Missverständnissen und kommt vor allem ganz ohne with aus :thumb:
ComboBox1.ItemIndex := ComboBox.Items.IndexOf(edit1.text);
|
Re: Syntax der with-Anweisung
Ich benutze with-Anweisungen auch eher selten, also nur wenn es mindestens drei oder 4 Anweisungen hintereinander gibt. Und ich beziehe mich in der with-Anweisung generell auf den "kleinsten gemeinsamen Nenner", also im Beispiel Combobox1.
|
Re: Syntax der with-Anweisung
@Whookie: :thumb: :thumb:
|
Re: Syntax der with-Anweisung
Zitat:
|
Re: Syntax der with-Anweisung
Hallo,
eine weitere Möglichkeit um Tipparbeit zu sparen ist zum Beispiel mit einer Variablen zu arbeiten. z.B.:
Delphi-Quellcode:
statt:
constructor THPLComPortClass.Create(AOwner: TComponent);
var C: TApdCustomComPort; begin inherited Create(AOwner); FComPort:= TApdComPort.Create(self); // Neuer ComPort Erstellen c:= FComPort; c.AutoOpen:= FALSE; c.Baud:= 9600; c.BufferFull:= 1; c.BufferResume:= 1; c.ComNumber:= 0; c.HWFlowOptions:= [hwfUseDTR,hwfUseRTS,hwfRequireDSR,hwfRequireCTS]; c.InSize:= 2; c.LogHex:= FALSE; c.OutSize:= 2; c.RTS:= FALSE; c.TapiMode:= tmNone;
Delphi-Quellcode:
Bis bald Chemiker
constructor THPLComPortClass.Create(AOwner: TComponent);
begin inherited Create(AOwner); FComPort:= TApdComPort.Create(self); // Neuer ComPort Erstellen with FComPort do begin AutoOpen:= FALSE; Baud:= 9600; BufferFull:= 1; BufferResume:= 1; ComNumber:= 0; HWFlowOptions:= [hwfUseDTR,hwfUseRTS,hwfRequireDSR,hwfRequireCTS]; InSize:= 2; LogHex:= FALSE; OutSize:= 2; RTS:= FALSE; TapiMode:= tmNone; end; |
Re: Syntax der with-Anweisung
Ich habe hier im Forum erfahren, das die Verwendung des 'with'-Statements mit Teeren und Federn bestraft wird. Daher möchte ich nur zwei Anmerkungen zu dieser Diskussion beitragen:
1. Die With-Anweisung von Visual Basic ist besser (Syntax sinngemäß):
Code:
Hier gehts um den Punkt: Schöne Idee, die ich mir in Delphi auch wünschen würde.
With Foobar do
.Property1 := bla; .Caption := mump; End Width 2. Übersichtlichkeit: Ich arbeite mit den Developer Express Komponenten, und da gibt es einen Bandwurm, um die einen selektierten Wert (die Spalte'MyNameColumn') eines Datengitters zu ermitteln: Ohne with
Delphi-Quellcode:
mit:
SelectedName := MyGridView.DataController.Values[MyGridView.DataController.FocusedRecordIndex, MyNameColumn.Index];
Delphi-Quellcode:
Im Bestreben, den Code auf das Wesentliche zu beschränken, finde ich die Variante mit 'with' einfach übersichtlicher. Natürlich unter der Voraussetzung, das das Klassenmodell von DevExpress bekannt ist.
With MyGridView.DataController do
SelectedName :=Values[FocusedRecordIndex,MyNameColumn.Index]; Mein Fazit: Ich verwende 'with', wenn ich Code leserlich gestalten will und würde mir die '.' Notation von VB in Delphi wünschen, damit dieses leidige Thema um die (ach so schlimme) und mißverständliche Verwendung von 'with' endlich ein Ende hat. Was mit einer guten Idee begann (vor 40 Jahren), in dem man eine Compileroptimierung als Sprachbestandteil manifestiert (Verwendung von Registern), ist heute im Kontext von OOP und mehrfach auftretender Eigenschaftsnamen ein Problem: CodeGear! handelt. :cheer: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:53 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