Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Prism Name des Verursachers eines Events? (https://www.delphipraxis.net/63724-name-des-verursachers-eines-events.html)

gerald.schittenhelm 22. Feb 2006 07:53


Name des Verursachers eines Events?
 
An alle Delphi-Profis:
Wie ist es möglich, in einer Prozedur an den Namen des Event-Verursachers zu kommen?
Ich denke, ich werde diese recht unbeholfene Formulierung meiner Frage mit einem konkreten Beispiel verdeutlichen:

Delphi-Quellcode:
{...}
  // In einer Schleife werden mehrere TextBox-Elemente erstellt,
  // welche die Namen menge0, menge1, menge2, ... tragen.
  nMenge := System.Windows.Forms.TextBox.Create;
  nMenge.Location := System.Drawing.Point.Create(0, LineNumber * LineSpace);

  // Hier wird der Name der TextBox festgelegt,
  // den ich später wieder ermitteln möchte:
  nMenge.Name := 'menge'+LineNumber.ToString;
  nMenge.Size := System.Drawing.Size.Create(55, 21);
  nMenge.Text := '';
  nMenge.TextAlign := System.Windows.Forms.HorizontalAlignment.Center;
  LinePanel.Controls.Add(nMenge);

  // Jetzt wird das TextChanged-Ereignis der Box
  // mit der Prozedur Menge_TextChanged verknüpft:
  Include(nMenge.TextChanged, Menge_TextChanged);
{...}
  Inc(LineNumber);
{...}

// Die Ereignisprozedur:
procedure fRechnung.Menge_TextChanged(sender: System.Object; e: EventArgs);
begin
  TEXTBOXNAME.Text := 'Irgendein Text';
end;
Soweit so gut.
Logischerweise würde ich aber gerne statt TEXTBOXNAME den richtigen Namen der TextBox erhalten, also im konkreten Fall: menge0, menge1, menge2, ...
Dieser Name nützt mir aber als String auch nicht viel: Wie kann ich das Steuerelement ansprechen, wenn ich z.B. nur einen String mit dem Namen der TextBox habe?
Kann mir jemand bei diesen Problemen behilflich sein? Ich probier schon den ganzen Tag herum...

Vielen Dank!

Luckie 22. Feb 2006 08:03

Re: Name des Verursachers eines Events?
 
Sollte doch im Parameter e drinne stehen diese Information.

smudo 22. Feb 2006 08:07

Re: Name des Verursachers eines Events?
 
Den Namen des Event-Verursachers bekommst du natürlich über Sender (wie der Name schon sagt)
Diesen musst du erstmal auf das Object casten, welches du benötigst,
also Beispielsweise TEdit(Sender).Name

René

Luckie 22. Feb 2006 08:21

Re: Name des Verursachers eines Events?
 
Äh ja. Sender natürlich. :oops:

gerald.schittenhelm 22. Feb 2006 08:47

Re: Name des Verursachers eines Events?
 
Mit TEdit(sender).Name geht das? Allright danke, werd ich probieren...
:lol:

Greetz

Elvis 22. Feb 2006 08:54

Re: Name des Verursachers eines Events?
 
Zitat:

Zitat von gerald.schittenhelm
Mit TEdit(sender).Name geht das? Allright danke, werd ich probieren...
:lol:

Geht sicher nicht, aber sender as Component, sender as Control, TextBox,... könnte gehen.
Irgendsoein TDing dürfte es wohl nicht mehr geben. ;)

gerald.schittenhelm 22. Feb 2006 09:00

Re: Name des Verursachers eines Events?
 
Wie jetzt? Ich nix verstehen, ich Anfänger...
Kannst du mir ein konkretes Codebeispiel liefern!? Bitte ? :cyclops:

Elvis 22. Feb 2006 09:12

Re: Name des Verursachers eines Events?
 
Zitat:

Zitat von gerald.schittenhelm
Wie jetzt? Ich nix verstehen, ich Anfänger...
Kannst du mir ein konkretes Codebeispiel liefern!? Bitte ? :cyclops:

Schonmal ein TIregndWas in .Net gesehen? Ein TEdit wirst du außerhalb irgendwelcher VCL.Net Libs so schnell nicht erleben. ;)

gerald.schittenhelm 22. Feb 2006 09:15

Re: Name des Verursachers eines Events?
 
Zitat:

Zitat von Elvis
Schonmal ein TIregndWas in .Net gesehen? Ein TEdit wirst du außerhalb irgendwelcher VCL.Net Libs so schnell nicht erleben. ;)

Es tut mir leid aber ich kenn mich noch immer nicht aus was du meinst.
Ein Beispiel bitte?! Wie komm ich jetzt konkret auf den Namen und wie kann ich ihn als Objekt weiterverwenden? Danke

kalmi01 22. Feb 2006 09:18

Re: Name des Verursachers eines Events?
 
Hallo gerald,

als Win32 würde es so aussehen
Delphi-Quellcode:
(sender as TTextBox).Name
wie das bei .Net aussieht, weiss ich nicht.

gerald.schittenhelm 22. Feb 2006 09:21

Re: Name des Verursachers eines Events?
 
Oh danke kalmi01, endlich mal ein konstruktiver beitrag...

Das hilft schon mal. Und jetzt meine schlussfolgernde Frage:
Wie geht das in .NET ? Wenns wer weiß, bitte danke... :angel2:

Stimmt das in etwa so:
Delphi-Quellcode:
(sender as System.Windows.Forms.TextBox).Name
:coder2:

Luckie 22. Feb 2006 09:36

Re: Name des Verursachers eines Events?
 
Probier es doch aus.

JasonDX 22. Feb 2006 09:44

Re: Name des Verursachers eines Events?
 
Zitat:

Zitat von gerald.schittenhelm
Stimmt das in etwa so:
Delphi-Quellcode:
(sender as System.Windows.Forms.TextBox).Name

Jain. Probier das Event mit ner TextBox auszulösen, und dann nochmal mit nem Button.
Zweiters wird dir nicht sonderlich gefallen.
Das zu vermeiden gibts dann 2 Möglichkeiten:
Name ist bereits in der Hirarchie in Control deklariert, d.h. sowas würde auch schon helfen:
Delphi-Quellcode:
(sender as System.Windows.Forms.Control).Name
noch ne kleine Abfrage dazu, damits im ernstfall doch nicht kracht:
Delphi-Quellcode:
if (sender is Control) then
  irgendeinstring := (sender as System.Windows.Forms.Control).Name;
Und falls du wirklich Spaß mit eigenen Klassen hast, die nicht von Control abgeleitet sind und trotzden nen Name haben, gibts sowas wie Reflections:
Delphi-Quellcode:
//Benötigter Namespace: System.Reflection;
PropertyInfo MyNameProperty := sender.GetType().GetProperty("Name");
if (MyNameProperty = nil) then
  irgendeinstring := MyNameProperty.GetValue(sender, nil);
greetz
Mike

gerald.schittenhelm 22. Feb 2006 11:23

Re: Name des Verursachers eines Events?
 
Vielen Dank, funzt! :wink:

smudo 22. Feb 2006 15:57

Re: Name des Verursachers eines Events?
 
Zitat:

Zitat von Elvis
Schonmal ein TIregndWas in .Net gesehen? Ein TEdit wirst du außerhalb irgendwelcher VCL.Net Libs so schnell nicht erleben.

Hab überlesen, dass es hier um .Net geht :oops:


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