Hi nochmal!
Den Typ musst Du irgendwie immer fest einbauen, ohne das könntest Du nur auf die Eigenschaften und Methoden von object zugreifen und das wird ein wenig zu mager sein…
In Deinem Fall könntest Du ja auf Control testen (wovon praktisch alle bekannten Steuerelemente abgeleitet sind), damit hättest Du Zugriff auf solche Eigenschaften wie Location oder Size , die Du zum Festlegen von Position und Größe auf einem Dialog brauchst.
Was willst du denn sonst mit dem Objekt anfangen, wenn Du den Typ herausgefunden hast?
Falls Du partout gar keine feste Typisierung haben willst, müsstest Du mittels Reflection zur Laufzeit die Eigenschaften des Typs von sender herausfinden und darüber Methoden aufrufen/Eigenschaften setzen. Ist allerdings recht aufwändig und wird daher auch nicht allzu schnell…
Beziehungsweise, nachdem ich Deine Antwort jetzt nochmal gelesen habe, kommt mir noch eine andere Idee: Geht es Dir vll. in Wahrheit darum, nicht bei allen Control die fürs Verschieben nötigen Eventhandler einzuhängen? In diesem Fall hast Du keine Chance, weil Du eben nur für die Controls die Ereignisse erhältst, für welche Du auch Eventhandler registriert hast.
Beim Umschalten in diesen Edit-Modus kannst du dann aber ganz einfach mit
foreach (Control c in this.Controls)
{
c.MouseDown += new MouseEventHandler(...
}
auf einen Schwung alle Controls abarbeiten (ggf. noch eine kleine rekursive Methode für z.B. Controls auf Panels o.ä.
Gruß,
Martin
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]