Ich habe eine öffentliche statische Klasse namens Router mit einigen Formularreferenzen wie diesem;Wie kann ich eine Formularreferenz von einer Klasse anhand des Namens mithilfe von Reflektion in C# abrufen?
public static class Router
{
static frmLogin rLogin = new frmLogin();
static frmDashboard rDashboard = new frmDashboard();
static frmReport rReport new frmReport();
}
Ich versuche, eine Funktion namens „Route“ zu schaffen - diese Funktion wird ein String-Parameter nehmen, die mindestens eines dieser Form Referenzen übereinstimmen. Bei Übereinstimmung wird das ausgewählte Formular mit der Methode "Index()" aufgerufen. (Jedes Formular hat einen Index() pre-built, ich brauche es nur genannt)
Es gibt nicht viel zu sagen über den Zweck dieser anderen als die Tatsache, dass ich eine MVC-ähnliche Struktur für eine sehr erstellen bestimmter Grund. So können alle anderen Vorschläge geschätzt werden. Um zusammenzufassen, muss ich die korrekte Formularreferenz nach Namen finden, d. H. "RLogin" mit einem Parameter in die "Route" -Methode übergeben, die schließlich die Funktion "Index()" auf diesem Formular aufrufen wird.
Ich verstehe, dass dies mit Reflection möglich sein kann und ich ein bisschen mit anderen Beispielen verwechselt wurde.
Danke.
Also würde ich es implementieren: Router obj = neue Router (frmWhatever); und es würde instanziieren und rufen Sie die Index-Funktion ... Aber nicht auf diese Weise ein Objekt erstellen jedes Mal, wenn ich auf ein anderes Formular route? Ich brauche nur einmal die Methode "Index()" des Formulars.Ich werde niemals andere Eigenschaften oder Methoden in diesem Objekt verwenden. Außerdem versuche ich, diese einzelne "Route" -Funktion für mehrere mögliche Klassennamen wiederzuverwenden, und alles, womit ich arbeiten muss, ist die Zeichenfolge auf der Schaltfläche, die angeklickt wurde, die bestimmt, was der Benutzer zu routen möchte, und so hatte ich gehofft, dass die entsprechende Klasse gefunden werden konnte. –
Sie wollen also sicherstellen, dass jede Klassen-Index-Methode genau einmal aufgerufen wird? Dann können Sie diese Funktionalität innerhalb der Factory anstelle des Routers-Konstruktors hinzufügen. Einfach die Index-Methode statisch machen und in den verschiedenen Fällen aufrufen: 'frmLogin.Index()'. Überprüfen Sie innerhalb der Methode, ob sie bereits mit einer statischen Variablen in der Klasse selbst aufgerufen wurde. – HimBromBeere
@BarryD. Wenn Sie eine Zuordnung von einer Zeichenkette zu einer Form wünschen, verwenden Sie einfach Dictionary '. Aber ich würde das so schnell wie möglich tun, um den "nicht sicheren" Weg so klein wie möglich zu halten :) –
Luaan