Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Prism Auf Control zugraufen per Schleife? (https://www.delphipraxis.net/48745-auf-control-zugraufen-per-schleife.html)

Taladan 29. Jun 2005 21:42


Auf Control zugraufen per Schleife?
 
Ich möchte gerne auf Controls (u. a. auf Buttons und Panels) per schleifen zugreifen.
Das klappt aber nicht so wie ich es mir vor stelle, kann mir einer sagen wie ich es richtig machen muß?
z.b.:
Delphi-Quellcode:
   for i := 0 to 5 do begin
     button[i].visible := false;
     panel[i].visible := false:
   end;

Luckie 29. Jun 2005 21:43

Re: Auf Control zugraufen per Schleife?
 
Die Suche ist dein Freund: Hier im Forum suchenFindComponent.

Taladan 29. Jun 2005 22:09

Re: Auf Control zugraufen per Schleife?
 
Ich finde nur Win32 antoworten.

Delphi-Quellcode:
      FindComponent('Button' + (i)) as Button).Visible := false
Hier wird nur schön fein säuberlich FindComponent rot unterkringelt...

Luckie 29. Jun 2005 22:17

Re: Auf Control zugraufen per Schleife?
 
Man könnte ja auch mal so verwegen sein und das genannte Stichwort in der Hilfe nachschlagen:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);

var
  i: Integer;
const
  NamePrefix = 'MyEdit';
begin
  for i := 1 to 20 dobegin
    TEdit.Create(Self).Name := NamePrefix + IntToStr(i);
    with TEdit(FindComponent(NamePrefix + IntToStr(i))) do
    begin
      Left := 10;
      Top := i * 20;
      Parent := self;
    end;
  end;
end;

Daniel G 29. Jun 2005 22:18

Re: Auf Control zugraufen per Schleife?
 
Zitat:

Zitat von Taladan
Ich finde nur Win32 antoworten.

Delphi-Quellcode:
      FindComponent('Button' + (i)) as Button).Visible := false
Hier wird nur schön fein säuberlich FindComponent rot unterkringelt...

Jo, und wo ist jetzt das Problem? Schließlich ist das ja hier auch ein Win32 - Thread, oder?

//Ups, sorry Luckie... Hab' mir den Post zu lange angesehen...

Taladan 30. Jun 2005 20:13

Re: Auf Control zugraufen per Schleife?
 
Das gepostete Beispiel funtkionert nicht bei .Net anwendungen

mirage228 30. Jun 2005 20:49

Re: Auf Control zugraufen per Schleife?
 
Hallo,

habe diesen Code eben mit Delphi 2005 VCL.NET getestet und er lässt sich kompilieren:
Delphi-Quellcode:
var
  i: integer;
begin
  for i := 0 to 3 do
  begin
    (FindComponent('Button' + (IntToStr(i))) as TButton).Visible := false
  end;
end;
oder arbeitest Du mit WinForms?

mfG
mirage228

Robert_G 30. Jun 2005 20:52

Re: Auf Control zugraufen per Schleife?
 
Zitat:

Zitat von Taladan
Das gepostete Beispiel funtkionert nicht bei .Net anwendungen

Zum Glück auch. Solchen Newbie-Kram wie FindComponent haben sie erst wieder in .Net 2.0 (2.0 ist enorm VB-Noob verseucht :zwinker: ) eingeführt... :?
was du willst ist wahrscheinlich:
Delphi-Quellcode:
class procedure DingsBums.SetChildrenVisibility(parent :Control; visible :Boolean);
var
  Control : Control;
begin
  for Control in parent.Controls do
    Control.Visible := visible;
Habe ich zwar nicht mit D.Net gestestet, aber in dem Punkt dürfte die Syntax beider Pascal.Net gleich sein. ;)

Taladan 1. Jul 2005 22:06

Re: Auf Control zugraufen per Schleife?
 
Zitat:

Zitat von Robert_G
Delphi-Quellcode:
class procedure DingsBums.SetChildrenVisibility(parent :Control; visible :Boolean);
var
  Control : Control;
begin
  for Control in parent.Controls do
    Control.Visible := visible;

Leider kann ich mit diesen beispiel rein gar nichts anfangen...

MathiasSimmack 2. Jul 2005 07:02

Re: Auf Control zugraufen per Schleife?
 
In welcher Hinsicht? Verstehst du es nicht? Oder lässt es sich nicht kompilieren?
Du musst solche Informationen auch angeben, :roll:, weil man dir sonst nicht helfen kann.

Robert_G 2. Jul 2005 07:16

Re: Auf Control zugraufen per Schleife?
 
Ich dachte ich greife dein Beispiel auf. ;)
Zitat:

Zitat von Taladan
Delphi-Quellcode:
   for i := 0 to 5 do begin
     button[i].visible := false;
     panel[i].visible := false:
   end;


Taladan 2. Jul 2005 08:49

Re: Auf Control zugraufen per Schleife?
 
Delphi sagt mir aber, das ein ArrayTyp erforderlich ist. Soweit war ich auch schon, das klappt leider nicht.

MathiasSimmack 2. Jul 2005 09:40

Re: Auf Control zugraufen per Schleife?
 
Delphi-Referenz durchsuchenControls ist doch ein Arraytyp. :gruebel: Klappt ja selbst mit CSharp wunderbar:
Code:
private void SetChildrenVisibility(Control parent, bool visible)
{
  foreach(Control control in parent.Controls) {
    control.Visible = visible;
  }
}

this.SetChildrenVisibility(this, false);

Taladan 2. Jul 2005 09:51

Re: Auf Control zugraufen per Schleife?
 
ich nutze jedoch delphi

MathiasSimmack 2. Jul 2005 09:54

Re: Auf Control zugraufen per Schleife?
 
Das habe ich bereits bemerkt. Wenn du aber tatsächlich für das .NET Framework schreibst, und nicht die VCL.NET benutzt, dann ist es letztlich nur eine Frage der anderen Syntax.

MathiasSimmack 2. Jul 2005 10:00

Re: Auf Control zugraufen per Schleife?
 
Ich habe das kurze Codestückchen mal eben kompiliert und die Exe im Reflector betrachtet. Die Umschaltung auf Delphi ergab:
Delphi-Quellcode:
procedure MainForm.SetChildrenVisibility(parent: Control; visible: boolean);
begin
  for control1 in parent.Controls do
  begin
    control1.Visible := visible
  end
end;
Warum jetzt die Variable control1 nirgendwo deklariert wird, kann ich dir aber nicht sagen. :gruebel: Evtl. ein kleines Problem im Programm, denn die VB-Variante scheint korrekt zu sein:
Code:
Private Sub SetChildrenVisibility(ByVal parent As Control, ByVal visible As Boolean)
      Dim control1 As Control
      For Each control1 In parent.Controls
            control1.Visible = visible
      Next
End Sub

Taladan 2. Jul 2005 10:05

Re: Auf Control zugraufen per Schleife?
 
Auch wenn obriges beispiel funtionieren sollte, hilft es nciht weiter. Immerhin will ich nicht alle sondern ausschlißlich ein paar Panels und Buttons sichbar (und andocken) machen.

Robert_G 2. Jul 2005 10:11

Re: Auf Control zugraufen per Schleife?
 
Bevor hier Mathias noch 5-mal sagt, dass es geht und du darauf sagst, dass es nicht geht und ... :freak:

Ich habe deine Problem so aufgefasst, dass du auf ein paar Controls in einer Schleife zugreifen willst:
Zitat:

Ich möchte gerne auf Controls (u. a. auf Buttons und Panels) per schleifen zugreifen.
Könnte man also fast so auffassen. :mrgreen:

Mein kleiner Minischnipdel macht nix anderes als Visible der Controls eines Forms/Panels/TabSheets/whatsoever auf true oder auf false zu setzen.
Die Syntax /IST/ kompatibel zu D.Net auch wenn ich zuviel Stolz habe um es selbst auszuprobieren. ;)
Was Delphi vielleicht nicht schnallt ist das hier:
Delphi-Quellcode:
Control : Control;
auch wenn's dann kkomisch aussieht, benenne die Variable einfach mal um. ;))

Nachtrag:
Delphi-Quellcode:
Auch wenn obriges beispiel funtionieren sollte, hilft es nciht weiter. Immerhin will ich nicht alle sondern ausschlißlich ein paar Panels und Buttons sichbar (und andocken) machen.
Aha! nun kommen wir doch der Sache etwas näher. ;)
Werfe betreffende Controls in einen Container (ArrayList, ControlCollection, ...) und nun kansst du durch den iterieren.

p.s.: Mathias' Code war natürlich falsch. :lol:

MathiasSimmack 2. Jul 2005 10:16

Re: Auf Control zugraufen per Schleife?
 
Zitat:

Zitat von Robert_G
p.s.: Mathias' Code war natürlich falsch. :lol:

Nur wenn man die neue Situation bzw. die neuen Informationen zugrunde legt, an denen ich nun auch teilhaben durfte. :stupid:

Robert_G 2. Jul 2005 10:48

Re: Auf Control zugraufen per Schleife?
 
Zitat:

Zitat von MathiasSimmack
Zitat:

Zitat von Robert_G
p.s.: Mathias' Code war natürlich falsch. :lol:

Nur wenn man die neue Situation bzw. die neuen Informationen zugrunde legt, an denen ich nun auch teilhaben durfte. :stupid:

Wäre immer falsch, außer du bist so krank und deklarierst Control1 als feld des Forms... :lol:

MathiasSimmack 2. Jul 2005 11:09

Re: Auf Control zugraufen per Schleife?
 
:hi: Ich sagte doch, der Delphi-Codeschnippsel kam aus Lutz Roeder's Reflector. Meine CSharp-Funktion findest du auf Seite 1.


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:56 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