"Nu s-a găsit tipul" eroare la încărcarea unui formular în Windows Forms Designer

Am un .NET 2.0 ferestre forme app, care face uz intens de control ListView .

I've subclassed the ListView class into a templated SortableListView class, so it can be a bit smarter about how it displays things, and sort itself.

Din păcate, acest lucru pare să spargă Visual Studio Forms Designer, atât în ​​VS2005, cât și în 2008.

Programul se compilează și rulează bine, dar când încerc să văd formularul care deține designerul, primesc aceste erori:

  • Tipul "MyApp.Controls.SortableListView" nu a putut fi găsit. Asigurați-vă că este menționată ansamblul care conține acest tip. Dacă acest tip face parte din proiectul dvs. de dezvoltare, asigurați-vă că proiectul a fost construit cu succes.

Nu există nici o urmă de stivă sau informații despre linia de eroare disponibile pentru această eroare

  • Variabila "listViewImages" este nedeclarată sau nu a fost niciodată atribuită.

La linia MyApp.Main.Designer.cs: Coloana XYZ: 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) 

Linia de cod în cauză este locul în care este adăugat efectiv la formular, și este

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

listViewImages este declarată ca

private MyApp.Controls.SortableListView listViewImages;

și este instanțiată în metoda InitializeComponent după cum urmează:

this.listViewImages = new MyApp.Controls.SortableListView();

După cum am menționat mai devreme, programul se compilează și se execută perfect și am încercat să schimbăm clasa SortableListView într-o ansamblu separat, astfel încât să poată fi compilat separat, dar acest lucru nu are nicio importanță.

Nu am idee de unde să merg de aici. Orice ajutor ar fi apreciat!

0
fr hi bn

11 răspunsuri

când ați adăugat vizualizarea în listă, l-ați adăugat în cutia de instrumente și l-ați adăugat apoi în formular?

No, I just edited Main.Designer.cs and changed it from System.Windows.Forms.ListView to MyApp.Controls.SortableListView

Suspectarea că s-ar fi datorat genericilor ma făcut să găsesc o soluție.

Pentru fiecare clasă de care am nevoie pentru a realiza un SortableListView, am definit o clasă "stub" ca aceasta

class ImagesListView : SortableListView { }

Apoi, fișierul Main.Designer.cs se referă la aceste clase de stub în loc de SortableListView .

Acum funcționează, te rog!

Din fericire, sunt în stare să fac acest lucru, deoarece toate tipurile sunt cunoscute în față și folosesc doar codul SortableListView ca metodă de reducere a codului duplicat.

0
adăugat
Hi Orion ... Am aceeași problemă ca și cum ați menționat mai sus ... Nu am reușit să înțeleg partea "Pentru fiecare clasă de care am nevoie pentru a realiza un SortableListView pentru, am definit o" clasă stub "ca această clasă ImagesListView : SortableListView {} "ce ați făcut pentru a rezolva această problemă? poți explica în detaliu? Ați creat o altă clasă nouă și apoi ați făcut referire la designer.cs?
adăugat autor Gowtham Ramamoorthy, sursa

Am avut o problemă de genul asta (nu același lucru) în trecut, în care controlul meu era într-un spațiu de nume diferit față de forma mea, chiar dacă era în același proiect. Pentru ao rezolva, a trebuit să adaug un

using My.Other.Namespace;

în partea de sus a fișierului de coduri generat de designer. Lucrul enervant a fost că a rămas uimit când designerul a regenerat pagina.

0
adăugat

Ansamblul care conține MyApp.Controls.SortableListView nu este instalat în GAC în orice caz este?

0
adăugat

când ați adăugat lista, ați adăugat-o în cutia de instrumente și apoi ați adăugat-o la formular?

0
adăugat

Am avut aceeași problemă. După ce am eliminat unele dintre comenzile mele din fișierul * .Designer.cs, problema a fost rezolvată. După revenirea la codul original, problema a fost încă rezolvată. Deci pare a fi o problemă cu cache-ul Visual Sudio. În momentul de față nu pot reproduce această problemă.

Dacă întâmpinați problema, încercați să emblemați dosarul

C: \ Users \ a numelui \ AppData \ Local \ Microsoft \ VisualStudio \ VERSIUNEA \ Designer \ ShadowCache

A funcționat?

0
adăugat

Am avut și această problemă, legată de îmbinarea modificărilor masive SVN (cu conflicte) în fișierul * .Designer.cs. Soluția a fost doar să se deschidă vizualizarea de proiectare grafic, să se editeze un control (mutați-l spre stânga, apoi spre dreapta) și să redea designul. Fișierul * .Designer.cs sa schimbat în mod magic și avertismentul a dispărut la următoarea compilație.

Pentru a fi clar, trebuie să rezolvați mai întâi toate problemele de îmbinare a codului. Aceasta este doar o operație în jurul valorii de a forța VS să le reîncărcați.

0
adăugat
Dirk - poți să crezi că nu este adevărat, dar asta mi sa întâmplat. Am petrecut ore să încerc să rezolv. Doresc să fiu în continuare versiunile anterioare și ulterioare ale fișierului Designer.cs, dar nu știu. Există în mod evident o eroare în Visual Studio care nu reîmprospătează corect unele meta date interne și singura modalitate prin care am găsit-o să repară este să forțeze o reîmprospătare prin reluarea vizualizării grafice.
adăugat autor Mark Lakata, sursa
vă rugăm să nu faceți acest vot în cazul în care credeți că acest lucru nu este adevărat. Există o eroare în Visual Studio în modul în care stochează fișierele de design și aceasta este o lucrare în jur. Desigur, trebuie să rezolvați mai întâi erorile și apoi să faceți acest lucru pentru a obține Visual Studio trecut.
adăugat autor Mark Lakata, sursa
Nu sunt de acord; acest lucru a lucrat pentru mine ca un farmec (folosind Framework 4.0). Când afișați inițial avertismentele de designer puse în picioare pentru câteva secunde, atunci formularul a fost tras corect. Am adăugat un buton, șterse butonul și am reconstruit soluția; avertismentele au dispărut.
adăugat autor Pieter Geerkens, sursa
Pur și simplu nu este adevărat. Dacă primiți oricare dintre aceste avertismente, vizualizarea grafică este întreruptă. Nimic nu se va arăta și deci nu puteți "mișca ceva în jurul valorii de a remedia în mod magic". Există doar o listă de erori și nici un gui pe măsură ce op se plânge.
adăugat autor Dirk Bester, sursa

Am avut ceva similar - un control al utilizatorului se refera la o serica de la distanta (pe care nu am putut sa o garantez ca este disponibila la momentul designului).

This post on MSDN suggested that I add

if (this.DesignMode) return;

la funcția de încărcare a comenzii sau, în cazul meu, până la punctul înaintea inițializării clientului WCF. Asta a făcut trucul.

Asa de

private readonly Client _client = new Client();

devine

private Client _client;

public new void Load()
{
    if(DesignMode) return;
    _client = new Client();
}
0
adăugat

Mi sa întâmplat datorită arhitecturii x86/x64.

Deoarece Visual Studio (instrumentul de dezvoltare propriu-zis) nu are versiune x64, nu este posibilă încărcarea controlului x64 în designerul GUI.

Cea mai bună abordare pentru acest lucru ar putea fi ajustarea GUI sub x86 și compilați-o pentru x64 când este necesar.

0
adăugat
Destul de sigur, schimbarea procesorului meu țintă spre x86 a rezolvat această problemă pentru mine. Mulțumiri!
adăugat autor johnnyRose, sursa
Acesta este un BS atât de complet din partea Microsoft.
adăugat autor Dr. Cogent, sursa
Chiar vreau o versiune x64 a Visual Studio.
adăugat autor user2033412, sursa

Poate ați uitat să adăugați că:

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

    /// 
    /// Release all resources used.
    /// 
    /// true if managed resources should be removed otherwise; false.
    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
       //...
    }
0
adăugat

În cazul meu, problema era numele dosarului meu al proiectului meu! De ce cred acest lucru: Eu folosesc SVN și în "trunk \ SGIMovel" funcționează perfect. Dar într-un folder de ramificație numit "OS # 125 \ SGIMovel" nu pot să deschid proiectantul pentru un formular care utilizează un control personalizat și funcționează în folderul trunchi.

Doar scoateți # și funcționează frumos.

Multumesc pentru nimic.

0
adăugat

Am avut aceeași problemă. În cazul meu, această problemă sa datorat inițierii resurselor. Am mutat următorul cod din metoda InitializeComponent în ctor (după ce a sunat InitializeComponent ). Ulterior, această problemă a fost rezolvată:

this->resources = (gcnew System::ComponentModel::ComponentResourceManager(XXX::typeid));
0
adăugat