![]() |
Problem beim finden dynamischer Menüeinträge
Hallo,
folgendes Problem: Ich habe ein dynamisch erzeugtes PopUp-Menü, welches wie folgt erzeugt wurde (Auszug):
Delphi-Quellcode:
wobei Feldnamenzuordnen1 ein übergeordneter Menüeintrag ist.
...
MyMenuItem := TMenuItem.Create(Feldnamenzuordnen1); MyMenuItem.Caption := AdressFields[i]; MyMenuItem.Tag := i; MyMenuItem.Name := 'Adress_' + IntToStr(i); MyMenuItem.OnClick := MyMenuItemClick; Feldnamenzuordnen1.Add(MyMenuItem); ... In einer Routine will ich überprüfen, ob bestimmte Untermenüpunkte schon mal angeklickt wurden, um dann die Eigenschaft checked entweder auf true oder false zu setzen. Dazu wollte ich
Delphi-Quellcode:
verwenden. Das klappt leider nicht! :wall:
Feldnamenzuordnen1.FindComponent('Adress_' + IntToStr(i)).checked := true;
Komischerweise funktioniert folgendes aber:
Delphi-Quellcode:
Was mach ich schon wieder falsch :cry:
ShowMessage(Feldnamenzuordnen1.FindComponent('Adress_' + IntToStr(i)).name);
|
Re: Problem beim finden dynamischer Menüeinträge
Hi,
FindComponent liefert dir lediglich eine "TComponent" zurück. Für Deine Checked Eigenschaft brauchst Du also ein TMenuItem:
Delphi-Quellcode:
mfG
(Feldnamenzuordnen1.FindComponent('Adress_' + IntToStr(i)) as TMenuItem).checked := true
mirage228 |
Re: Problem beim finden dynamischer Menüeinträge
dir fehlt ein Type-cast
Delphi-Quellcode:
generell wäre man aber vor dem Type-cast auf der sicheren Seite mit der Abfrage
(Feldnamenzuordnen1.FindComponent('Adress_' + IntToStr(i)) as TMenuItem).checked := true;
Delphi-Quellcode:
if (Feldnamenzuordnen1.FindComponent('Adress_' + IntToStr(i)) is TMenuItem) then
... daß die 1. Anweisung nicht funktioniert, aber die 2. Anweisung mit ShowMessage funktioniert, liegt daran, daß eine Komponente eine Property "name" besitzt, aber keine Property "Checked". Roderich |
Re: Problem beim finden dynamischer Menüeinträge
Zitat:
aber der AS-Operator führt intern bereits ein IS aus (und löst ggf. ein EInvalidCast aus), soweit ich weiss. Daher sollte man. wenn man schon mit IS prüft, dann auch direkt type-casten, also so (ich würde mir dann das doppelte findcomponent sparen):
Delphi-Quellcode:
mfG
var
Comp: TComponent; begin Comp := Feldnamenzuordnen1.FindComponent('Adress_' + IntToStr(i)); if (Comp is TMenuItem) then TMenuItem(Comp).Checked := True; end; mirage228 |
Re: Problem beim finden dynamischer Menüeinträge
Ich liebe Euch alle :love:
Es funktioniert :) |
Re: Problem beim finden dynamischer Menüeinträge
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:30 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