Wie kann ich eine Liste aller benutzerdefinierten Steuerelemente abrufen, die dem aktuellen Namespace hinzugefügt wurden? Ich benutze C# 2010.Abrufen einer Liste benutzerdefinierter Steuerelemente aus dem aktuellen Namespace
Antwort
Mit dieser Methode i Liste aller Benutzer extrahieren definierte Steuerelemente in meinem Projekt und erstellen Sie eine Instanz des benutzerdefinierten Steuerelements anhand seines Namens in meinem Formular.
var assemblies = AppDomain.CurrentDomain.GetAssemblies(); // Get my CurrentDomain Object
Assembly myType = Assembly.GetExecutingAssembly(); // Extract list of all references in my project
foreach (var assembly in assemblies) // Search for the library that contains namespace that have needed controls
{
if (assembly.GetName().ToString().ToUpper().IndexOf("FIBACONTROLS") > -1)
{
myType = assembly; // Get All types in the library
List<Type> myTps = myType.GetTypes().ToList();
Type mT = null;
foreach (Type selType in myTps) // Find the type that refer to needed user-defined control
{
if (selType.Name.ToUpper() == "FIBACOLORPICKER")
{
mT = selType;
break;
}
}
if (mT == null)
return;
object myInstance = Activator.CreateInstance(mT); // Created an instance on the type
Control mFib = (Control)myInstance; // create the control's object
mFib.Name = "Hahah"; // add the control to my form
mFib.Left = 100;
mFib.Top = 200;
mFib.Visible = true;
this.Controls.Add(mFib);
break;
}
}
Ich versuche, einen Kommentar zu schreiben, um es zu beschreiben.
Es funktioniert und sicher gibt es einen besseren Weg, es zu tun, aber ich bin neu in C# und ich bin mir sicher, dass die Lösung, die ich gefunden habe, nicht die beste ist.
Sie können Reflexion verwenden. Versuchen Sie diesen Code:
public static class ControlsFinder
{
public static List<Type> FindControls(Assembly controlsLibrary,
string rootNamespace, bool includeNestedTypes = true)
{
var parent = typeof(UserControl);
return controlsLibrary.GetTypes()
.Where(t => (includeNestedTypes
? t.FullName.StartsWith(rootNamespace)
: t.FullName.Equals($"{rootNamespace}.{t.Name}"))
&& parent.IsAssignableFrom(t))
.ToList();
}
}
Anwendungsbeispiel:
var controls = ControlsFinder.FindControls(Assembly.GetExecutingAssembly(), "WinFrm");
Wenn Sie nur Namen möchten Sie sie von controls
wählen:
var names = controls.Select(t => t.Name).ToArray();
Ich weiß nicht, wo es falsch ist. Ich habe ein benutzerdefiniertes Steuerelement erstellt und das Projekt zu der Referenz meines Haupt-App-Projekts hinzugefügt. Jetzt kann ich auf keinen Fall den Namen meines benutzerdefinierten Steuerelements abrufen, das meinem Haupt-App-Projekt hinzugefügt wurde. Dieser Code return steuert auch mit 0 Mitgliedern. – Farzin
Ich habe die Antwort aktualisiert. Achten Sie darauf, die korrekte Assembly in 'FindControls' zu übergeben. Ich habe "GetExecutingAssembly" verwendet, aber es ist nur ein Beispiel –
Danke für Ihre Hilfe, aber es funktioniert nicht. Wie kann ich mein vereinfachtes Projekt hochladen? – Farzin
- 1. Artikel aus benutzerdefinierter Liste abrufen
- 2. Rails 3: Aktuellen Namespace abrufen?
- 3. Abrufen benutzerdefinierter CacheItems aus MemoryCache
- 4. Aktuellen angemeldeten Benutzer aus einer Ansicht abrufen
- 5. Informationen aus einer Liste abrufen
- 6. Benutzerdefinierter Ordner und Namespace
- 7. Abrufen benutzerdefinierter Attributparameterwerte?
- 8. Python: Liste der Sockets auf dem aktuellen Rechner abrufen?
- 9. Abrufen einer Liste aus dem ersten Datensatz von Inner Join
- 10. Abrufen einer Liste mit Bildern aus dem lokalen Ordner
- 11. Abrufen aller Klassen aus dem aktuellen Arbeitsbereich in Eclipse
- 12. Elemente aus einer Liste nach IDs einer anderen Liste abrufen
- 13. Liste der Dateien im aktuellen Verzeichnis abrufen
- 14. Abrufen von Werten aus einer Liste
- 15. ein benutzerdefiniertes Attribut aus dem aktuellen Element in ColdFusion abrufen?
- 16. LinqToSql - Abrufen einer Liste verschiedener IDs aus einer verschachtelten Liste
- 17. Abrufen einer Liste von `PackageDescriptions` aus der lokalen Datenbank
- 18. Namespace eines ProjectItem abrufen
- 19. Namespace aus dem Wörterbuch auffüllen?
- 20. Zeile aus Bereich im aktuellen Arbeitsblatt abrufen?
- 21. SharePoint - Eine Liste der aktuellen Benutzer abrufen
- 22. Werte aus einer Liste (API) abrufen
- 23. Abrufen freigegebener Einstellungen aus einer Checkable-Liste
- 24. Schlüsselwerte aus einer Liste von Wörterbüchern abrufen
- 25. Eine Liste aus einer Datei abrufen?
- 26. f # aus eigener benutzerdefinierter Liste entfernen
- 27. Liste aller instanziierten Steuerelemente in der Registrierung abrufen
- 28. Abrufen des aktuellen Metrikwerts aus Graphit
- 29. Abrufen der aktuellen IP-Adresse aus einer Anwendung (VC++ 2005)
- 30. Visual Studio-Ressourcenerzeugung - Benutzerdefinierter Werkzeug-Namespace
Haben Sie etwas versucht? Lesen Sie über Reflektion? –
Ja, ich habe es versucht. Steuerelemente werden dem Namespace hinzugefügt, und der Namespace ist kein Objekt. Ich konnte die Liste der benutzerdefinierten Steuerelemente nicht aus dem Namespace extrahieren. – Farzin