Laden...

Problem mit Type.GetType()

Erstellt von JunkyXL vor 17 Jahren Letzter Beitrag vor 17 Jahren 1.895 Views
JunkyXL Themenstarter:in
1.665 Beiträge seit 2006
vor 17 Jahren
Problem mit Type.GetType()

Hi,
ich möchte das Handling mit den Mdi Childs vereinfachen und kein Dictionary verwenden, indem die Forms eingetragen werden. Ist mir mittlerweile zu komplex und ich möchte ganz einfach neue Forms zum Mdi Handling hinzufügen können.
Für was das besondere Mdi Handling?
Der Grund ist, dass ich bereits geöffnete Mdi Childs nicht nochmal öffnen will, sondern nur Active() setzen will.
Falls kein Mdi geöffnet ist, wird es erzeugt.
Das hat ja bisher funktioniert, aber wie gesagt, zu komplex geworden.
Anhand des im Dictionary enthalteten Form-Typ konnte ich eine Instanz davon erzeugen und anzeigen (Show()).

Alter Codeschnipsel:

:::

formInstance.MdiParent = this.ultraTabbedMdiManager.MdiParent;
formInstance.Show();

Nun möchte ich den Typ auf eine andere Weise holen... und da dachte ich mal, schaust in die Type-Klasse, und dort gibt es auch Type.GetType()

:::

Type typeToShow = Type.GetType("FormTest", true);

Could not load type 'FormTest' from assembly 'nanotec.UserClient, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'.

Falls die Frage aufkommt, ob FormTest im Projekt vorhanden ist -> ja 😉
Ich habe möglichweise zu viel ausgeholt, aber ich denke es wird Einige interessieren, was ich drumherum vorhabe.

Ich danke schonmal für Antworten.

_
416 Beiträge seit 2005
vor 17 Jahren

Hallo,

du musst den kompletten Namensraum mit angeben, sonst wird die Klasse nicht gefunden.

cu, tb

JunkyXL Themenstarter:in
1.665 Beiträge seit 2006
vor 17 Jahren

Das hätte auch als Info dabei stehen können..
Dann noch namespace mit this.GetType().Namespace holen und gut is.

Dank dir!

L
497 Beiträge seit 2006
vor 17 Jahren

Original von JunkyXL
Das hätte auch als Info dabei stehen können..

Schon. Du musst aber zugeben, dass es auch einer gewissen Logik nicht entbehrt. Woher soll denn sonst bekannt sein, welche Klasse Du meinst? Du kann ja mehrere gleichnamige Klassen im Projekt haben, die sich nur durch den Namespace unterscheiden.

Sarkusmus ist, wenn nichts mehr hilft, außer Lachen.

49.485 Beiträge seit 2005
vor 17 Jahren

Hallo JunkyXL,

oder anders herum gesagt, man kann ja im Programmcode die Klassennamen ohne Qualifierung nur wegen der usings benutzen. Und ein using wirkt natürlich nicht auf Namen in Strings.

herbivore

T
512 Beiträge seit 2006
vor 17 Jahren

Bei mir steht da:

typeName

The assembly-qualified name of the type to get. See [  

> ](http://msdn2.microsoft.com/en-us/library/system.type.assemblyqualifiedname.aspx). If the type is in the currently executing assembly or in Mscorlib.dll, it is sufficient to supply the type name qualified by its namespace.

Finde ich recht eindeutig.

e.f.q.

Aus Falschem folgt Beliebiges

JunkyXL Themenstarter:in
1.665 Beiträge seit 2006
vor 17 Jahren

Bei mir steht halt das in der Exception was ich im ersten Beitrag gepostet habe..

Original von herbivore
Hallo JunkyXL,

oder anders herum gesagt, man kann ja im Programmcode die Klassennamen ohne Qualifierung nur wegen der usings benutzen. Und ein using wirkt natürlich nicht auf Namen in Strings.

herbivore

Ich wäre darauf nie gekommen, den Namespace noch mit anzugeben, weil in der Exception ja steht: "Could not load type 'FormTest' from assembly 'nanotec.UserClient"
Dort wird ja nämlich der Name der Assembly genannt, welcher auch der Namespace ist, indem sich die Form befindet...

49.485 Beiträge seit 2005
vor 17 Jahren

Hallo JunkyXL,

ja, bloß der Namen der Assembly und der Name des Namespaces sind vollkommen unabhängig von einander (mal abgesehen davon, dass eine Assembly mehr als einen Namespace enthalten kann) und es ist reine Konvention, wenn man diese gleich benennt.

herbivore

T
512 Beiträge seit 2006
vor 17 Jahren

Nur mal ein Tipp für die Zukunft. Wenn eine Funktion eine Exception wirft, steht meist in der Hilfe zu der Funktion warum das auftritt, und wie man es behebt. Und wenn nicht schadet es auch nicht mal nen Blick reingeworfen zu haben.
Die Message in der Exception ist oft nicht sonderlich Aussagekräftig und zum Teil auch irreführend.

e.f.q.

Aus Falschem folgt Beliebiges

JunkyXL Themenstarter:in
1.665 Beiträge seit 2006
vor 17 Jahren

Original von Traumzauberbaum
Die Message in der Exception ist oft nicht sonderlich Aussagekräftig und zum Teil auch irreführend.

Das habe ich auch schon des öfteren festegestellt 😉
Danke für den Tipp.

L
497 Beiträge seit 2006
vor 17 Jahren

Also ich finde die Exceptions in der Regel ziemlich eindeutig und mit aussagekrätigen Fehlermeldungen versehen. Es mag Ausnahmen geben, aber dass in der MSDN mehr drinsteht liegt in der Natur der Sache. Und natürlich schadet es nie, spätestens bei einem Fehler (meistens auch schon früher) einen Blick in die MSDN zu werfen.

Sarkusmus ist, wenn nichts mehr hilft, außer Lachen.