tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
7
ZUGRIFFE
1097
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Registriert seit
    Aug 2005
    Ort
    Nürnberg
    Beiträge
    202
    Hallo,

    folgende Fragen:
    1. Wie kann ich alle Klassen aus einem Namespace auslesen?

    (angenommen Punkt 1 währe abgehackt)
    2. Jetzt habe ich eine ListBox wo alle diese Klassen drin stehen. Wie kann ich folgendes nach dem Doppelklick auf die ListBox erreichen:

    Code :
    1
    
    [this.listBox1.SelectedItem.ToString()] myControl = new [this.listBox1.SelectedItem.ToString()]();

    Das was in den []-Klammern drin steht ist der Name der Klasse.


    Ich habe eine .DLL-Datei wo einige UserControls sind. Ich möchte alle auslesen und dann (wie schon beschrieben) mit this.panel.Controls.Add(myControls) darstellen.

    bis jetzt hab ich das mit

    Code :
    1
    2
    3
    4
    5
    6
    7
    
    if(...)
    {
     class1 c1 = new class1();
    }
    else if(...)
     class2 cs = new class2();
    }
    usw. gemach. Doch das ist, meiner Meinung nach eine sehr schmutzige Methode.

    Hätte jemand ein Vorschlag, wie man das o.g. Problem lösen könnte?

    Danke

    Gruß
    d-Stench

    PS: Habe nichts gefunden, da ich nicht genau weis nach was (Begriffe) ich eigendlich suchen muss.
     

  2. #2
    Avatar von Norbert Eder
    Norbert Eder Norbert Eder ist offline Mitglied Diamant
    Registriert seit
    Feb 2004
    Ort
    Österreich / Graz
    Beiträge
    5.137
    Blog-Einträge
    51
    Da wirst du wohl mit Reflection arbeiten müssen. Ich hab dir mal ein Beispiel angehängt, mit dem du aus einem bestimmten Namespace die einzelnen Typen herausbekommst und feststellen kannst, ob es sich dabei um ein UserControl handelt, oder nicht.

    Dieses Beispiel kannst du bei dir nachbauen, musst jedoch die Controls dann noch instanzieren bevor du sie zur Controls.Collection hinzufügen kannst.
    Angehängte Dateien Angehängte Dateien
     

  3. #3
    Avatar von Christian Kusmanow
    Christian Kusmanow Christian Kusmanow ist offline Mitglied Diamant
    Registriert seit
    Aug 2004
    Ort
    Aachen (NRW)
    Beiträge
    2.208
    Blog-Einträge
    15
    Moin!

    Schaut für mich so aus als möchtest Du sowas in der Art wie ein Pluginframework realisieren?
    Wenn ja, dann erläuter uns doch mal was Du eigentlich genau machen willst.
    Es ist in dem Fall Ratsam mit BasisKlassen und Interfaces zu arbeiten,
    um das Verwalten der Controls zu erleichtern und um Basisfunktionalitäten
    wie zB das Speichern von Einstellungen etc. realisieren zu können.
     
    MfG,
    Christian

    Wer sein Problem definiert, hat es schon halb gelöst!

    Bitte markiert eure Themen als erledigt. Sonst macht so ein Forum als Nachschlagewerk keinen Sinn.

    The Code Project! - C# Programming | C# / VB.NET Pendants

    Regeln + Netiquette

    Liebe FIAEs, verlasst euch nicht auf das was in der Berufsschule "vermittelt" wird
    und vor allem nicht auf das, was euch die IHK dazu erzählt!
    Die haben so viel Ahnung von dem Gewerk, wie der Bundestag vom Haushalt...

  4. #4
    Registriert seit
    Jun 2002
    Ort
    Saarbrücken (Saarland)
    Beiträge
    9.886
    Blog-Einträge
    29
    Hallo!

    Es kann aber durchaus auch vorkommen, dass ein Namespace nicht genauer einer Assembly zugeordnet werden kann.

    So suchst du assembly-übergreifend, ausgehend von der Start-Assembly, über alle referenzierten Assemblies alle Typen in einem bestimmten Namespace.

    Code csharp:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    
    using System;
    using System.Reflection;
    using System.Collections;
     
    namespace De.Tutorials.Training
    {
        /// <summary>
        /// 
        /// </summary>
        /// <author>Thomas.Darimont</author>
        public class ListTypesInNamespaceExample
        {
     
            public static void Main(string[] args)
            {
     
                AssemblyName[] assemblyNames = new AssemblyName[Assembly.GetEntryAssembly().GetReferencedAssemblies().Length+1];
                assemblyNames[0] = Assembly.GetEntryAssembly().GetName();
                Assembly.GetEntryAssembly().GetReferencedAssemblies().CopyTo(assemblyNames, 1);
     
                foreach (AssemblyName assemblyName in assemblyNames)
                {
                    Assembly assembly = Assembly.Load(assemblyName);
                    Type[] types = FindAllExportedTypesInNamespaceFor(assembly, "De.Tutorials");
                    Array.ForEach(types, delegate(Type type)
                    {
                        Console.WriteLine(type.FullName);
                    });
                }
            }
     
            private static Type[] FindAllExportedTypesInNamespaceFor(Assembly assembly, string namespacePattern)
            {
                ArrayList list = new ArrayList();
                Type[] types = assembly.GetExportedTypes();
                foreach(Type type in types){
                    if (type.FullName.StartsWith(namespacePattern))
                    {
                        list.Add(type);
                    }
                }
                return (Type[])list.ToArray(typeof(Type));
            }
     
        }
    }

    Gruß Tom
     
    Java rocks!
    How to become a good Java Programmer?
    Does IT in Java and .Net
    The only valid measurement of code quality: WTFs / minute
    Blog
    Xing
    Twitter

  5. #5
    Registriert seit
    Aug 2005
    Ort
    Nürnberg
    Beiträge
    202
    Es sing insgesammt zwei Projecte.
    In einem wird eine Main-Anwendung geschrieben in dem anderen eine Bibliothek mit UserControls. Die Main-Anwendung soll alle KlassenNamen die in der Bibliothek vorhanden sind auslesen (z.B. in eine Listbox). Wenn diese Namen dann angeklickt werden soll eine Instanz erzeugt werden.
     

  6. #6
    Registriert seit
    Aug 2005
    Ort
    Nürnberg
    Beiträge
    202
    Zitat Zitat von Norbert Eder Beitrag anzeigen
    Da wirst du wohl mit Reflection arbeiten müssen. Ich hab dir mal ein Beispiel angehängt, mit dem du aus einem bestimmten Namespace die einzelnen Typen herausbekommst und feststellen kannst, ob es sich dabei um ein UserControl handelt, oder nicht.

    Dieses Beispiel kannst du bei dir nachbauen, musst jedoch die Controls dann noch instanzieren bevor du sie zur Controls.Collection hinzufügen kannst.
    Danke für das Beispiel! (habe jetzt VS2005 installiert und das ausprobiert)

    Du hast ja bereits im Quellcode festgelegt, welche Klassen du abfragst. Wie macht man das, wenn man die Klassen nicht kennt.

    foreach(class myClass in myNamespace)
    {
    }

    es soll dynamisch sein.

    Ist es überhaupt möglich?
     

  7. #7
    Avatar von Christian Kusmanow
    Christian Kusmanow Christian Kusmanow ist offline Mitglied Diamant
    Registriert seit
    Aug 2004
    Ort
    Aachen (NRW)
    Beiträge
    2.208
    Blog-Einträge
    15
    Schau Dir doch mal Tom's Beispiel an...
     
    MfG,
    Christian

    Wer sein Problem definiert, hat es schon halb gelöst!

    Bitte markiert eure Themen als erledigt. Sonst macht so ein Forum als Nachschlagewerk keinen Sinn.

    The Code Project! - C# Programming | C# / VB.NET Pendants

    Regeln + Netiquette

    Liebe FIAEs, verlasst euch nicht auf das was in der Berufsschule "vermittelt" wird
    und vor allem nicht auf das, was euch die IHK dazu erzählt!
    Die haben so viel Ahnung von dem Gewerk, wie der Bundestag vom Haushalt...

  8. #8
    Registriert seit
    Aug 2005
    Ort
    Nürnberg
    Beiträge
    202
    Ich denke, dass ich jetzt genug Material habe auf dem ich weiter selber aufbauen kann! Ich danke allen Beteiligten SEHR

    Gruß
    d-Stench
     

Ähnliche Themen

  1. JBoss - alle geladenen Klassen herausfinden
    Von Paul_W im Forum Enterprise Java (JEE, J2EE, Spring & Co.)
    Antworten: 0
    Letzter Beitrag: 13.01.11, 13:54
  2. Antworten: 3
    Letzter Beitrag: 10.02.10, 10:23
  3. Klassen in einem Browsergame
    Von Kalma im Forum PHP
    Antworten: 5
    Letzter Beitrag: 01.12.08, 08:55
  4. alle Klassen finden
    Von VampyAnna im Forum Java
    Antworten: 2
    Letzter Beitrag: 02.04.08, 16:28
  5. mehrere klassen in einem GUI ausführen
    Von sim26 im Forum Java
    Antworten: 5
    Letzter Beitrag: 11.07.06, 12:03