HowTo: Der Klassendesigner kann nicht angezeigt werden ... keine Designbare Klasse enthalten.
-
Manchmal ist der Formdesigner der Meinung, das es keine Designbare Klasse gibt und verweigert die Form.
Gerade wenn man an der Form bzw. dem Header nichts per Hand geändert hat steht man auf dem schlauch, es gibt keinen Ansatz was denn stören könnte.
Der Hinweis das man das Projekt neu erstellen soll hilft aber nicht immer.
u.A. sind bei der Suche nach dem Problem folgende Lösungsmöglichkeiten immer wieder aufgefallen:
- Projekt bereinigen und öffnen des Dialoges
Das Projekt bereinigen und danach - [uohne rigendwas zu erstellen[/u] den Dialog öffnen. Das wird zwar ein weilchen dauern, aber die Abhängigkeiten schenen hierbei neu aufgelöst zu werden.
- Neustart des Systems
Manchmal verträgt sich irgendeine laufende Software nicht mit der IDE. Leider bekommt man das mit einfachem schliessen nicht mehr in den Griff. Nach einem neustart des Systemes hilft man hier dem Parser seinen Müll zu vergessen. Gerade wenn es mal Probleme mit der Assemblie gibt, die plötzlich von nichts mehr weiß kann es helfen.
- Löschen von Leerzeichen
#pragma region Windows Form Designer generated code #pargma endregion
Zwischen diesen zwei Zeilen scheint alles dem Parser zu gehören. Leider haut dieser einem öfters mal Leerzeilen rein, nicht selten sehr viele. Ab und an verschluckt er sich auch an diesen. Es könnte also auch helfen, wenn man zwischen den 2 Pargmas alle Leerzeilen entfernt.
- Auslagern von Quellcode
Die IDE packt alles was man macht in den Header. Abgesehen davon, das man sich hiermit bei den Abhängigkeiten der Units keinen gefallen macht (Muss man Code ändern, ändert sich der Header und alles was den Header verwendet muss neu compiliert werden, richtig ausgelagert kann man sich das oft ersparen und muss nur eine einzige Unit übersetzen), es scheint auch ein Ärgernis für den Parser zu sein. Wenn man also einfach nichts findet, lagert man den eigentlichen Code , wie es eigentlich sein sollte, in eine .cpp aus und lässt nur die Deklaration im Header. (Kann man der IDE das so beibringen das die das auch von alleine macht ?)
- Vererbte Controls
Wenn eigene Controls erstellt werden (abgeleitet von UserControl oder anderen Controls wie z. B. TextBox oder ProgressBar) lassen sich diese nur im Formsdesigner verwenden, wenn sie mit der Compileroption /clr:pure übersetzt werden. /clr alleine gibt böse Fehler (anonymus)
- Man kann das Projekt in einen Pfad speichern, in dem es noch nie lag. Das Projekt muss dann mit der Hand vollständig bereinigt werden (release , debug und intellisense Dateien löschen). Danach wird es eine weile dauern da alles neu aufgebaut wird, aber man kommt an den Dialog heran.
Da ich schon lange mit diesem Problem kämpfe und immer wieder Fluche hab ich auch kräftig bei Googel nach Lösungen gesucht aber nichts gefunden. Also, wer weiß noch ein paar Kniffs ?
-
Wenn eigene Controls erstellt werden (abgeleitet von UserControl oder anderen Controls wie z. B. TextBox oder ProgressBar)
lassen sich diese nur im Formsdesigner verwenden, wenn sie mit der Compileroption
/clr:pure übersetzt werden. /clr alleine gibt böse Fehler. Zumindest bei mir.
-
Nachdem sich die Dialoge garnicht mehr öffnen liesen und die Schlussfolgerung in richtung Intellisense gingen, gab ich das Problem an MS. Hier gab es folgenden Workarround der soweit auch funktioniert:
We finally found a workaround that allows opening the forms in the WinForms designer (still building /clr): (1) do a build, (2) close the IDE, (3) delete the DMSKV.NCB (or, all NCBs, but in this case this is the only interesting one), (4) re-open the IDE, (5) wait for NCB population to complete. To do this, go to Class View and open the top node.
You'll see a line like "36 files to parse". When that goes to zero and real data is displayed, then the parsing is complete. Unfortunately, this only works for the initial NCB file population. And in this test case, you'll need to wait several times. So, I wait until the "Updating Intellisense..." message in the status bar disappears AND the CPU usage on the machine goes to zero. To do this, start Task Manager and minimize it. It will display CPU usage as an icon in the tray, near the clock, by default in the lower-right corner. (6) Open a form. This should work. (7) Once again, wait for NCB update to complete. (8) Open another form. (9) Wait for NCB update to complete. Etc.
If at any time you don't wait completely for the NCB update to occur, and the form displays the WSOD error, the form won't open successfully again, and you'll need to delete the NCB again.