Ich habe eine benutzerdefinierte Klasse, die von UserControl
abgeleitet ist.
Der Code:
Diese Klasse funktioniert wie es soll. Aber wenn ich versuche, den Design-Modus des Formulars zu betreten, das diese Gallery
-Klassen enthält, gibt es mir Fehler:
Der Typ 'PresentrBuilder.Forms.Gallery' konnte nicht gefunden werden. Bitte stellen Sie sicher, dass die Baugruppe das enthält diesen Typ ist referenziert. Wenn dieser Typ ein Teil Ihres ist Entwicklungsprojekt, stellen Sie sicher, dass Das Projekt wurde erfolgreich abgeschlossen gebaut.
Die Variable 'pictureGallery' ist entweder nicht deklariert oder wurde nie angezeigt zugewiesen.
Hinweis: ( pictureGallery
ist tatsächlich ein Gallery<PictureElement>
).
Wie kann das gelöst werden? Auf diese Weise kann ich nicht im Entwurfsmodus arbeiten, was die Erstellung meiner Benutzerschnittstelle ziemlich schwierig macht.
Der Designer hasst (d. h. unterstützt keine generischen Steuerelemente) und das wird sich in absehbarer Zeit nicht ändern, also tu das nicht. Betrachten Sie stattdessen eine Eigenschaft (oder eine ähnliche), die ein Type
akzeptiert, und arbeiten Sie zur Laufzeit (Reflektion usw.) - oder: verwenden Sie den Designer nicht.
Zum Beispiel, wenn Sie:
%Vor%Sie können verwenden:
%Vor% Dies wird Ihnen alles geben, was Sie gerade haben ( new
, IElement
, etc) - aber es kann einfach keine Validierung während der Kompilierung durchführen.
Wie die anderen bereits erwähnt haben, hat der Visual Studio Designer viele Probleme beim Umgang mit Generics in Controls. Ich bin selbst auf dieses Problem gestoßen, als ich versuchte, so etwas wie eine generische "Property Viewer" -Klasse zu implementieren.
Die Lösung, die für mich funktionierte, war, eine Zwischenklasse zu definieren, wie Egor sagte. Wenn ich Ihre Frage richtig verstehe, sollte das für Ihre Situation etwa so aussehen:
%Vor%Verwenden Sie dann die PictureElementGallery in Ihrem Formular statt Galerie & lt; PictureElement & gt; . Der Designer sollte damit keine Probleme haben.
Tags und Links c# generics types user-controls designmode