Wie bekommt man Informationen über "sender"?

Scrapy

Mitglied
Wozu dient diese Instanz "sender" von (fast) jeder Funktion?

In C++ bekommt man da auch den Namen des Objektes heraus, der diese Funktion ausgelöst hat, ist das in C# auch möglich?
Ich hab da schon ne menge mit: sender.GetType(). ... probiert aber ich habe noch keine Funktion über den Namen (also den Entwurfsnamen!) gefunden. Man kann sich ja so viel anzeigen lassen, wo das Objekt her stammt, von welcher Klasse usw. aber ich hätte eben gerne den Entwurfsnamen.

Ich will damit abfragen können, welches Objekt diese Funktion aufgerufen hat - eventuell gibt es dazu auch eine andere Möglichkeit... . :(


Ich bedanke mich schonmal für eure Antworten! :)
 
Du kannst es mit etwas gleichsetzen, z.B. wenn du eine Methode hast die an mehreren Click Ereignissen von verschiedenen Buttons hängt kannst du

switch(sender)
{
case this.button1:
break;
case this.button2:
break:
(...)
}

oder du kannst theoretisch prüfen ob es sich um ein Control handelt

if(sender is Control)
{
}

Ein Control hat glaub ich einen Namen . .
 
Hi.

Mit dem 'sender'-Parameter kommst du an das Objekt, welches das Event ausgelöst hat.
Da es vom Typ object musst du es noch in den richtigen Typ casten um bestimmte Methoden aufzurufen.

Da du dein Programm ja selbst geschrieben hast, wirst du ja wissen was für Typen dieses Event auslösen werden. Wenn du einen EventHandler für mehrere Typen erstellen willst, weisst du aber dennoch welche Typen vorkommen können und kannst nach diesen Fragen.

Wie das geht, soll dir ds folgende Beispiel zeigen. Führe es bei dir einfach mal aus.

Code:
using System;

public class Test
{
	public static void Main(string[] args)
	{
		object b = new A();
		object a = new B();
		
		if (a is A)
		{
			Console.WriteLine("a is A ..");
			((A)a).WriteA();
		}
		if (a is B)
		{
			Console.WriteLine("a is B ..");
			((B)a).WriteB();
		}
		
		if (b is A)
		{
			Console.WriteLine("b is A ..");
			((A)b).WriteA();
		}
		if (b is B)
		{
			Console.WriteLine("b is B ..");
			((B)b).WriteB();
		}
	}
	
		
}
public class B
{
	public B()
	{
	}
	
	public void WriteB()
	{
		Console.WriteLine("Ich bin B");
	}
}

public class A
{
	public A()
	{
	}
	
	public void WriteA()
	{
		Console.WriteLine("Ich bin A");
	}
}

MfG,
Alex
 
Ausserdem ist es sehr praktisch, wenn man Besipielsweise Felder(Array) von Steuerelementen benutzt. So kann mit einer Funktion (Eventhandler) pro Event alle Steuerelemente behandeln.
 
Original geschrieben von Alexander Schuc
Das geht ohne Array auch.

Klar doch, aber wenn man Arrays benutzt brauch man sich nicht zu kümmer wer jetzt aus der Liste das Ereignis ausgelöst hat. Man kann gleich das Senderobjekt benutzen. :)
 
Original geschrieben von mage
Klar doch, aber wenn man Arrays benutzt brauch man sich nicht zu kümmer wer jetzt aus der Liste das Ereignis ausgelöst hat. Man kann gleich das Senderobjekt benutzen. :)

Du kannst immer das Sender-Objekt benutzen? Was soll nun der Unterschied sein, wenn einzelne Controls die nicht gemeinsam in einem Array lümmeln ein Event auslösen, oder Controls die gemeinsam in einem Array liegen?
 
Zurück