Frage

Ich habe eine .NET 2.0-Windows-Formular-App, die die stark nutzt ListView Kontrolle.

Ich habe das in Unterklassen unterteilt ListView Klasse in eine Vorlage SortableListView<T> Klasse, daher kann es etwas intelligenter sein, Dinge anzuzeigen und sich selbst zu sortieren.

Leider scheint dies den Visual Studio Forms Designer sowohl in VS2005 als auch 2008 zu beschädigen.

Das Programm lässt sich kompilieren und läuft einwandfrei, aber wenn ich versuche, das besitzende Formular im Designer anzuzeigen, erhalte ich folgende Fehlermeldungen:

  • Der Typ „MyApp.Controls.SortableListView“ konnte nicht gefunden werden.Stellen Sie sicher, dass auf die Assembly verwiesen wird, die diesen Typ enthält.Wenn dieser Typ Teil Ihres Entwicklungsprojekts ist, stellen Sie sicher, dass das Projekt erfolgreich erstellt wurde.

Für diesen Fehler sind keine Stack-Trace- oder Fehlerzeileninformationen verfügbar

  • Die Variable „listViewImages“ ist entweder nicht deklariert oder wurde nie zugewiesen.

Bei MyApp.Main.Designer.cs Zeile:XYZ Spalte:1

Call stack:
at System.ComponentModel.Design.Serialization.CodeDomSerializerBase.Error(IDesignerSerializationManager manager, String exceptionText, String helpLink)
at System.ComponentModel.Design.Serialization.CodeDomSerializerBase.DeserializeExpression(IDesignerSerializationManager manager, String name, CodeExpression expression)
at System.ComponentModel.Design.Serialization.CodeDomSerializerBase.DeserializeExpression(IDesignerSerializationManager manager, String name, CodeExpression expression)
at System.ComponentModel.Design.Serialization.CodeDomSerializerBase.DeserializeStatement(IDesignerSerializationManager manager, CodeStatement statement) 

Die betreffende Codezeile befindet sich dort, wo sie tatsächlich zum Formular hinzugefügt wird, und zwar

this.imagesTab.Controls.Add( this.listViewImages );

listViewImages ist deklariert als

private MyApp.Controls.SortableListView<Image> listViewImages;

und wird im instanziiert InitializeComponent Methode wie folgt:

this.listViewImages = new MyApp.Controls.SortableListView<Image>();

Wie bereits erwähnt, lässt sich das Programm perfekt kompilieren und ausführen, und ich habe versucht, das zu verschieben SortableListView Klasse in eine separate Assembly auslagern, damit sie separat kompiliert werden kann, aber das macht keinen Unterschied.

Ich habe keine Ahnung, wohin ich von hier aus gehen soll.Jede Hilfe wäre dankbar!

War es hilfreich?

Lösung 3

Als Sie die Listenansicht hinzugefügt haben, haben Sie sie zur Toolbox und dann zum Formular hinzugefügt?

Nein, ich habe es nur bearbeitet Main.Designer.cs und änderte es von System.Windows.Forms.ListView Zu MyApp.Controls.SortableListView<Image>

Der Verdacht, dass es an den Generika liegen könnte, führte mich dazu, tatsächlich eine Lösung zu finden.

Für jede Klasse, für die ich eine SortableListView erstellen muss, habe ich eine „Stub-Klasse“ wie diese definiert

class ImagesListView : SortableListView<Image> { }

Habe dann das gemacht Main.Designer.cs file beziehen sich auf diese Stub-Klassen statt auf die SortableListView.

Es funktioniert jetzt, Hurra!

Zum Glück kann ich das tun, da alle meine Typen im Voraus bekannt sind und ich nur die verwende SortableListView als Methode zur Reduzierung doppelten Codes.

Andere Tipps

Es ist mir aufgrund der x86/x64-Architektur passiert.

Da Visual Studio (das Entwicklungstool selbst) keine x64-Version hat, ist es nicht möglich, die x64-Steuerung in den GUI-Designer zu laden.

Der beste Ansatz hierfür könnte darin bestehen, die GUI unter x86 zu optimieren und sie bei Bedarf für x64 zu kompilieren.

Ich hatte in der Vergangenheit ein Problem wie dieses (wenn auch nicht dasselbe), bei dem sich mein Steuerelement in einem anderen Namespace als mein Formular befand, obwohl es sich im selben Projekt befand.Um das Problem zu beheben, musste ich eine hinzufügen

using My.Other.Namespace;

an den Anfang der vom Designer generierten Codedatei.Das Ärgerliche war, dass es immer wieder verloren ging, als der Designer die Seite neu generierte.

Ich hatte auch dieses Problem im Zusammenhang mit der Zusammenführung massiver SVN-Änderungen (mit Konflikten) in der Datei *.Designer.cs.Die Lösung bestand darin, einfach die Entwurfsansicht grafisch zu öffnen, ein Steuerelement zu bearbeiten (es nach links und dann nach rechts zu verschieben) und den Entwurf erneut zu speichern.Die Datei *.Designer.cs hat sich auf magische Weise geändert und die Warnung verschwand bei der nächsten Kompilierung.

Um es klar auszudrücken: Sie müssen zuerst alle Probleme bei der Codezusammenführung beheben.Dies ist lediglich ein Workaround, um VS zum Neuladen zu zwingen.

Die Assembly, die MyApp.Controls.SortableListView enthält, ist doch nicht zufällig im GAC installiert, oder?

Als Sie die Listenansicht hinzugefügt haben, haben Sie sie zur Toolbox und dann zum Formular hinzugefügt?

Vielleicht haben Sie vergessen, Folgendes hinzuzufügen:

    /// <summary>
    /// Required designer variable.
    /// </summary>
    private System.ComponentModel.IContainer components = null;

    /// <summary>
    /// Release all resources used.
    /// </summary>
    /// <param name="disposing">true if managed resources should be removed otherwise; false.</param>
    protected override void Dispose(bool disposing)
    {
        if (disposing && (components != null))
        {
            components.Dispose();
        }
        base.Dispose(disposing);
    }

    private void InitializeComponent()
    {
        // ...
        this.components = new System.ComponentModel.Container(); // Not necessarily, if You do not use
        // ...
    }

Ich hatte etwas Ähnliches – ein Benutzersteuerelement bezog sich auf einen Remote-Dienst (dessen Verfügbarkeit ich zur Entwurfszeit nicht garantieren konnte).

Dieser Beitrag auf MSDN schlug vor, dass ich etwas hinzufüge

if (this.DesignMode) return;

auf die Load-Funktion des Steuerelements oder in meinem Fall auf den Punkt vor der Initialisierung des WCF-Clients.Das hat funktioniert.

Also

private readonly Client _client = new Client();

wird

private Client _client;

public new void Load()
{
    if(DesignMode) return;
    _client = new Client();
}

Ich hatte das gleiche Problem.In meinem Fall war dieses Problem auf die Ressourceninitialisierung zurückzuführen.Ich habe den folgenden Code von verschoben InitializeComponent Methode zu ctor(Nach dem Aufruf InitializeComponent).Danach wurde dieses Problem behoben:

this->resources = (gcnew System::ComponentModel::ComponentResourceManager(XXX::typeid));

Ich hatte das gleiche Problem.Nachdem ich einige meiner eigenen Steuerelemente aus der *.Designer.cs-Datei entfernt hatte, war das Problem gelöst.Nachdem ich zum ursprünglichen Code zurückgekehrt war, war das Problem immer noch gelöst.Es scheint also ein Problem mit dem Visual Sudio-Cache zu sein.Im Moment kann ich dieses Problem nicht reproduzieren.

Wenn das Problem auftritt, versuchen Sie, den Ordner zu leeren

C:\Benutzer\IHRNAME\AppData\Local\Microsoft\VisualStudio\VERSION\Designer\ShadowCache

Hat es funktioniert?

In meinem Fall war das Problem der Ordnername meines Projekts!Warum ich das denke:Ich verwende SVN und im „Trunk\SGIMovel“ funktioniert es perfekt.Aber in einem Zweigordner mit dem Namen „OS#125\SGIMovel“ kann ich den Designer für ein Formular nicht öffnen, das ein benutzerdefiniertes Steuerelement verwendet und im Stammordner funktioniert.

Nehmen Sie einfach die # weg und es funktioniert gut.

Danke für nichts.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top