AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

With ... do Anweisungen....

Ein Thema von Kedariodakon · begonnen am 23. Sep 2004 · letzter Beitrag vom 23. Sep 2004
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Kedariodakon
Kedariodakon

Registriert seit: 10. Sep 2004
Ort: Mönchengladbach
833 Beiträge
 
Delphi 7 Enterprise
 
#1

With ... do Anweisungen....

  Alt 23. Sep 2004, 01:04
So habe mir mal gedacht ich mache meine 30 Labels alle auf einmal leer, aber scheiße was...

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  with Label1, Label2, Label3 {...Hier gings noch weiter :) ...} do Caption := '';
end;
Aber geändert wurde nur das letzte Label
Ich hatte gedacht der macht das mit allen...

Wie bokomm ich das hin das er alle 30 Label leer macht? ohne jedes einzelne leer zu machen?

MFG Keda
Christian
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

Re: With ... do Anweisungen....

  Alt 23. Sep 2004, 01:06
Stichwort für die Suche heißt: Hier im Forum suchenFindcomponent.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Kedariodakon
Kedariodakon

Registriert seit: 10. Sep 2004
Ort: Mönchengladbach
833 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: With ... do Anweisungen....

  Alt 23. Sep 2004, 01:47
Cool sowas hab ich schon immer gesucht, zwar net in dem zusammenhang aber das kann man ja öfters brauchen =)

aber trotzdem is das doch komisch das der das bei der with ... do Schleife net macht oder?
Was ist wenn ich mit mehreren Objecten arbeite, die zufällig die selbe methode haben? dann wird die letzte angegebene benutzt und die andere net obwohl ich die eigendlich meinte...
Verwirrend...

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  With Label1 do
    With Label2 do
      With Label3 do
        With Label4 do
          Caption := 'geändert';
end;
ist ja genau das selbe wie:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  With Label1, Label2, Label3, Label4 do
    Caption := 'geändert';
end;
Geändert wird aber immer das letzte...

Aber warum baut Borland sowas für mehrere ein, wenns verbugt ist? (Jedenfalls nach meiner meinung....)
Hätten sie wenigstens verständlich in die Hilfe schreiben können...
Oder versteht ihr das?

Zitat:
Delphi-Sprachreferenz
In diesem Fall wird jede Variablenreferenz und jeder Methodenname in Anweisung als Element von Objektn-1 behandelt, wenn dies möglich ist. Andernfalls wird die Referenz bzw. der Name als Element von Objektn–1 interpretiert usw. Dieselbe Regel gilt für die Interpretation der Objekte selbst. Ist beispielsweise Objektn sowohl ein Element von Objekt1 als auch von Objekt2, wird es als Objekt2.Objektn interpretiert.
Naja egal



MFG Keda
Christian
  Mit Zitat antworten Zitat
NicoDE
(Gast)

n/a Beiträge
 
#4

Re: With ... do Anweisungen....

  Alt 23. Sep 2004, 02:00
with-do ist eben kein for-each.

Stell Dir with-do als Namensraum/Scope vor, der verwendet werden soll.
Die Aufzählung ist nur eine Vereinfachung um nicht...
Delphi-Quellcode:
with foo do
begin
  with bar do
  begin
    //...
  end;
end;
...schreiben zu müssen.
  Mit Zitat antworten Zitat
Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: With ... do Anweisungen....

  Alt 23. Sep 2004, 02:08
Zitat:
Delphi-Sprachreferenz

Ist beispielsweise Objektn sowohl ein Element von Objekt1 als auch von Objekt2, wird es als Objekt2.Objektn interpretiert.
Was ist daran unklar?? Das erklärt den Sachverhalt doch optimal. Wenn eine Eigenschaft in mehreren der angegebenen Objekte vorhanden ist, wird immer die Eigenschaft des letzten angegebenen Objektes das passt genommen.
with ist nicht dazu da, um mehrere Objekte gleicher Klasse auf einmal zu behandeln, sondern lediglich zur Vereinfachung des Schreibens.
Anstelle von:
Delphi-Quellcode:
Object1.DoThis;
Object1.DoThat;
Object1.DoSometingElse;
Object1.DoNothing;
ermöglicht with:
Delphi-Quellcode:
with Object1 do
begin
  DoThis;
  DoThat;
  DoSometingElse;
  DoNothing;
end;
Das und nur das macht with. Für deinen Zweck brauchst du FindComponent, oder du erzeugst deine Labels von vorne herein in einem array of TLabel von Hand, und nicht im Formulardesigner. Dann kannst du mit einer for-Schleife über deine Labels iterieren.

Mit Bug-Vorwürfen wäre ich ganz vorsichtig...


gruss,
Fabian

btw: Das Verwenden von mehreren Objekten in with wird im allgemeinen als schlechter Stil angesehen, da man so gut wie garnicht mehr nachvollziehen kann welche Property sich denn nun anuf welchen Objekt bezieht. Bei typgleichen Objekten ists noch einfach: Immer das letzte in der Liste. Aber sonst kann es echt grausam werden. (Wird's je nach Code auch schon mit nur einem Objekt und anderen Feldern der aktuellen Klasse die wohlmöglich gleich heissen.)
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel
  Mit Zitat antworten Zitat
Benutzerbild von Kedariodakon
Kedariodakon

Registriert seit: 10. Sep 2004
Ort: Mönchengladbach
833 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: With ... do Anweisungen....

  Alt 23. Sep 2004, 02:17
für sowas nehm ich sie ja auch, aber bei mehrfachen ineinander Anwendungen der With...do - Anweisung kann es passieren, dass es nicht macht was es soll
Das an sich ist ja nicht schlimm, aber das man net mal irgendwo darauf hingewiesen wird ist dumm...

Und wenn man net aufpast baut man so Fehler ein weil man schon müde ist und am nächsten Tag findet man ihn einfach net


Für mich ist die Sache nu eigendlich gegessen, da ich ja nun weiß das es so nicht geht


MFG Keda
Christian
  Mit Zitat antworten Zitat
Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: With ... do Anweisungen....

  Alt 23. Sep 2004, 03:02
Zitat von Kedariodakon:
aber das man net mal irgendwo darauf hingewiesen wird ist dumm...
Öhm, ist doch eigentlich logisch, dass das "wurschtelig" werden muss wenn zwei angegebene Objekte eine gleichlautende Property haben, dann muss sich der Compiler für eines entscheiden. Und:
Delphi-Quellcode:
type
  TOne = class
    Florida: Integer;
    Paris: Integer;
  end;
  TTwo = class
    Birmingham: Byte;
    Paris: Integer;
  end;
.
.
.
var
  One: TOne;
  Two: TTwo;
.
.
with One, Two do
begin
  // --> viele Zeilen Code hier <--
  Florida := 12;
  Paris := 8;
  Birmingham := 3;
end;
Wüsstest du jetzt ohne immer nachschauen zu müssen, dass "Florida" sich auf "One" bezieht, und "Birmingham" auf "Two", und vor allem "Paris" auf "Two", aber nur, weil es als letztes in der Liste steht?
Ich denke, dass man dafür keinen Hinweis braucht, sondern das ist einfach eine logische konsequenz dieses Konstruktes.

Alle Objekte der Liste bearbeiten haut nicht hin, da with ja (leider) kein Iterator ist wie das neue for each, dass ja noch kommt.
Zitat von Kedariodakon:
with ... do Schleife
Genau das ist es nämlich nicht: Eine Schleife.

Guts Nächtle,
Fabian


\\edits: Hatte mich erst verlesen -> inhaltliche Korrektur *imhalbschlafbin*
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel
  Mit Zitat antworten Zitat
Benutzerbild von Kedariodakon
Kedariodakon

Registriert seit: 10. Sep 2004
Ort: Mönchengladbach
833 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: With ... do Anweisungen....

  Alt 23. Sep 2004, 03:38
Asche über mein Haupt



Nu weiß ich es Dizzy
Aus Fehlern lernt man ja bekanntlich, oder besser sollte man
Wie ist das eigendlich wenn zwei Klassen ne Eigenschaft mit gleichen Namen, aber unterschiedlichen Typen haben? Sucht der sich dann das richtige aus?
müßte er ja oder?


MFG Keda
Christian
  Mit Zitat antworten Zitat
Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#9

Re: With ... do Anweisungen....

  Alt 23. Sep 2004, 03:49
Zitat von Kedariodakon:
Asche über mein Haupt
Nu weiß ich es Dizzy
Okay, Mission erfolgreich
(Wollte nicht unfreundlich daher kommen; falls es so klang *beteuer*)

Zitat von Kedariodakon:
Wie ist das eigendlich wenn zwei Klassen ne Eigenschaft mit gleichen Namen, aber unterschiedlichen Typen haben? Sucht der sich dann das richtige aus?
müßte er ja oder?
Genau das habe ich mich beim Scheiben des letzten beitrags auch gefragt. Wenn Delphi so intelligent ist wie ich es ihm unterstelle, dann ja. Allerdings bin ich noch nie in die Verlegenheit gekommen, dass das der Fall war. Ich vermeide "with" so oft wie möglich, es sei denn es handelt sich um einen Block voll Zuweisungen die nur an dieses eine Objekt gehen. (Ist oftmals beim Zeichnen sehr parktisch: Anstelle von X mal "Bitmap.Canvas.*" nur noch "*" innerhalb des Blocks. Oder aber z.B. bei Open-/Save-Dialogen kann man sich sehr schön eine Variable sparen: "with TOpenDialog.Create do ...", da man den (selben) Dialog selten später noch braucht.)

Wäre also nett von Delphi, wenn es das täte, aber auf der anderen Seite auch wieder gemein, da es die Verwendung von "with" in dieser Art und Weise auch noch fördern würde .

with freundlichem Gruß ( 8) )
Fabian
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel
  Mit Zitat antworten Zitat
Benutzerbild von Kedariodakon
Kedariodakon

Registriert seit: 10. Sep 2004
Ort: Mönchengladbach
833 Beiträge
 
Delphi 7 Enterprise
 
#10

Re: With ... do Anweisungen....

  Alt 23. Sep 2004, 05:26
Hmm da es jetzt schon so früh ist, werd ich das nu auch net mehr testen
Die Ampel-Anlage hat mich schon ganz schön in beschlag genoommen

Mal schaun ob ich Heute nochmal zeit für finde, dann poste ich mein Ergebniss

MFG Keda
Christian
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:08 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz