Ich habe ein Task Pane für Outlook erstellt welches 4 customListBox-Elemente (eigene Klasse, erbt von ListBox) beinhaltet. Bevor ich die Klasse erstellt hatte, beinhaltete das Task Pane 4 standard Task Panes die den selben Namen hatten wie die neuen customListBox-Elemente. Als ich die alten ListBoxen entfernen und durch die neuen ersetzen wollte habe ich manuell etwas in DetailsPane.Designer.cs geändert. Nun bekomme ich ab und zu beim Ausführen meines Programms die Fehlermeldung "Um mögliche Datenverluste zu verhindern, müssen vor dem Laden des Designers folgende Fehler behoben werden:" und darunter 4 Einträge zu den CustomListBox-Elementen mit der Meldung: " die variable listBox1" wurde nicht deklariert oder nicht zugeordnet.". Manchmal steht auch die Zeilennummer dabei in der der Fehler auftreten soll, diese beinhaltet je nach ausgewählter Fehlermeldung "this.Controls.Add(this.listBox1);". Der Fehler tritt wie bereits gesagt nicht immer auf und die Zeilennummer steht auch nicht immer dabei (im anderen Fall Zeile 0, Zeichen 0). Kann mir bei dem Problem jemand helfen ?
Hallo tyarr,
ersteinmal solltest Du deine Beiträge ein wenig anders Formatieren.. Hin und wieder ein Enter an der richtigen Stelle erhöht die Lesbarkeit enorm.
Als zweites solltest Du die Designer.cs am besten nie anpacken. Wenn das doch mal passiert, und dein Anwendungsfall ist einer der wenigen wo ich das gut heisse, solltest Du den Designer vorher schliessen damit er neu laden kann und sich nichts "zwischenspeichert".
Zur Not das Studio einmal neu starten.
Gruß
Hallo unconnected,
okay werde ich.
Ja, das habe ich mittlerweile schon öfters gelesen. Habe auch VS schon oft neu gestartet aber es ändert sich nichts am Fehler. Hast du sonst noch irgendwelche Ideen ?
Hallo,
könnte mir höchstens vorstellen das in der .suo Datei noch was Designer spezifisches abgespeichert wird.
Has Du wirklich nur die Klassen ausgetauscht?
Hallo,
würde dann aber nicht immer der Fehler auftreten beim Laden?
Ich glaube ja, es ist schon ein paar Tage her.
Ich habe gerade herausgefunden, dass ich den Fehler reproduzieren kann, wenn ich die Projektmappe neu erstelle. Wenn ich anschließend den designer schließe und neu öffne, kann ich die Form allerdings wieder sehen.
Was immer du da in der Designer Datei geändert hast war offensichtlich nicht richtig.
Die Meldung die dir präsentiert wird kommt dadurch weil eine Exception ausgelöst wurde während der VS Designer die Einstellungen serialisiert und verarbeitet hat. (Vereinfacht gesagt während er die InitializeComponent() Methode abgearbeitet hat)
Was auch immer du da an Code in der Designer Datei geändert hast, er löst auf jeden Fall eine Exception aus und das scheinbar genau 4x.
Du siehst die Meldung nur beim ersten öffnen weil der Designer so schlau ist die Designer Form nur einmal zu erstellen, diese erstellte Instanz wird bei einem neuerlichen kompilieren allerdings immer verworfen. Daher siehst siehst du den Fehler nach jedem kompilieren immer nur genau 1x und beim nächsten öffnen/zum Tab wechseln kriegst du halt das was der Designer trotz Fehler daraus machen konnte.
Wenn es noch irgendwie geht dann mach deine Änderungen an der Designer Datei rückgängig und hör auf am Designer Code rumzufummeln. Du kannst im ctor deiner Pane nach dem InitializeComponent() doch die Dinge noch immer noch nach deinen Wünschen regeln. Und wenn du glaubst das dass nicht geht, auf myCSharp.de gerne nachfragen.
(Optional kannst du noch deinen InitializeComponent Code posten aber ohne Garantie. Meterlangen Code zu diagnostizieren ist nicht so unbedingt eine Community Aufgabe)
Ich kann die Änderungen leider nicht mehr rückgängig machen. Ich hatte gedacht wenn ich es da direkt ändere geht das schneller..
Hier möglicherweise relevante Teile von InitializeComponent:
private void InitializeComponent()
{
this.columnHeader1 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.columnHeader2 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.columnHeader3 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.columnHeader4 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.listBoxTasks = new PluginTest.CustomListBox();
this.listBoxEvents = new PluginTest.CustomListBox();
this.listBoxContactComments = new PluginTest.CustomListBox();
this.listBoxCompanyComments = new PluginTest.CustomListBox();
this.SuspendLayout();
//
// listBoxTasks
//
this.listBoxTasks.BorderStyle = System.Windows.Forms.BorderStyle.None;
this.listBoxTasks.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawVariable;
this.listBoxTasks.FormattingEnabled = true;
this.listBoxTasks.ItemHeight = 66;
this.listBoxTasks.Location = new System.Drawing.Point(18, 223);
this.listBoxTasks.Name = "listBoxTasks";
this.listBoxTasks.Size = new System.Drawing.Size(338, 70);
this.listBoxTasks.TabIndex = 36;
this.listBoxTasks.DrawItem += new System.Windows.Forms.DrawItemEventHandler(this.CustomListBox_DrawItem);
this.listBoxTasks.SelectedIndexChanged += new System.EventHandler(this.listBoxTasks_SelectedIndexChanged);
//
// listBoxEvents
//
this.listBoxEvents.BorderStyle = System.Windows.Forms.BorderStyle.None;
this.listBoxEvents.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawVariable;
this.listBoxEvents.FormattingEnabled = true;
this.listBoxEvents.ItemHeight = 66;
this.listBoxEvents.Location = new System.Drawing.Point(18, 320);
this.listBoxEvents.Name = "listBoxEvents";
this.listBoxEvents.Size = new System.Drawing.Size(338, 70);
this.listBoxEvents.TabIndex = 37;
this.listBoxEvents.DrawItem += new System.Windows.Forms.DrawItemEventHandler(this.CustomListBox_DrawItem);
this.listBoxEvents.SelectedIndexChanged += new System.EventHandler(this.listBoxEvents_SelectedIndexChanged);
//
// listBoxContactComments
//
this.listBoxContactComments.BorderStyle = System.Windows.Forms.BorderStyle.None;
this.listBoxContactComments.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawVariable;
this.listBoxContactComments.FormattingEnabled = true;
this.listBoxContactComments.ItemHeight = 66;
this.listBoxContactComments.Location = new System.Drawing.Point(18, 415);
this.listBoxContactComments.Name = "listBoxContactComments";
this.listBoxContactComments.Size = new System.Drawing.Size(338, 70);
this.listBoxContactComments.TabIndex = 38;
this.listBoxContactComments.DrawItem += new System.Windows.Forms.DrawItemEventHandler(this.CustomListBox_DrawItem);
this.listBoxContactComments.SelectedIndexChanged += new System.EventHandler(this.listBoxContactComments_SelectedIndexChanged);
//
// listBoxCompanyComments
//
this.listBoxCompanyComments.BorderStyle = System.Windows.Forms.BorderStyle.None;
this.listBoxCompanyComments.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawVariable;
this.listBoxCompanyComments.FormattingEnabled = true;
this.listBoxCompanyComments.ItemHeight = 66;
this.listBoxCompanyComments.Location = new System.Drawing.Point(18, 515);
this.listBoxCompanyComments.Name = "listBoxCompanyComments";
this.listBoxCompanyComments.Size = new System.Drawing.Size(335, 70);
this.listBoxCompanyComments.TabIndex = 39;
this.listBoxCompanyComments.DrawItem += new System.Windows.Forms.DrawItemEventHandler(this.CustomListBox_DrawItem);
this.listBoxCompanyComments.SelectedIndexChanged += new System.EventHandler(this.listBoxCompanyComments_SelectedIndexChanged);
// In den nächsten 4 Zeilen wird mir immer der Fehler angezeigt
this.Controls.Add(this.listBoxCompanyComments);
this.Controls.Add(this.listBoxContactComments);
this.Controls.Add(this.listBoxEvents);
this.Controls.Add(this.listBoxTasks);
this.ResumeLayout(false);
this.PerformLayout();
}
Nachtrag:
Mir ist gerade aufgefallen, dass für alle Komponenten ein
((System.ComponentModel.ISupportInitialize)(this.komponente)).BeginInit();
vorhanden ist, ausser für die listBoxen, kann es damit was zu tun haben ?
Wie sind die Variablen definiert in der Designer-Datei ?
Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...
Nach #endregion (anfang ist #region Vom Komponenten-Designer generierter Code)
private PluginTest.CustomListBox listBoxTasks;
private PluginTest.CustomListBox listBoxEvents;
private PluginTest.CustomListBox listBoxContactComments;
private PluginTest.CustomListBox listBoxCompanyComments;
Wenn der Designer offen ist und alles angezeigt wird.
Dann zieh einen Button auf das Form.
Speichern
Button entfernen
Speichern
Alle Fenster schliessen
Solution bereinigen
VS schliessen
VS öffnen
Neu kompilieren
VS schliessen
So was hilft bei mir meistens (es erzwingt, dass der DesignerCode von VS neu geschrieben wird)... und die Bereinigung löscht ungültigen Schrott in Obj.
Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...
hat leider nicht geholfen. nach erneutem erstellen erscheint der fehler wieder.
Lade mal einen PrintScreen rauf
Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...
Mach mal das hier:
Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...
Habe mal
private PluginTest.CustomListBox listBoxTasks;
private PluginTest.CustomListBox listBoxEvents;
private PluginTest.CustomListBox listBoxContactComments;
private PluginTest.CustomListBox listBoxCompanyComments;
auskommentiert, und debugging gestartet. Da kommt ein anderer Fehler, siehe Anhang.
Wenn die Zeilen
private PluginTest.CustomListBox listBoxTasks; private PluginTest.CustomListBox listBoxEvents; private PluginTest.CustomListBox listBoxContactComments; private PluginTest.CustomListBox listBoxCompanyComments;
aus kommentiert sind.
Dann müssen auch alle weitere Zeilen aus kommentiert werden, die sich auf diese Objekte beziehen.
Die Zeilen enthielten die Deklaration der Objekte.
Ich würde dir eher raten das Projekt neu aufzusetzen und diesmal nichts im Designer manuell zu ändern.
Habe das Problem gelöst. Bei
private PluginTest.CustomListBox listBoxTasks;
private PluginTest.CustomListBox listBoxEvents;
private PluginTest.CustomListBox listBoxContactComments;
private PluginTest.CustomListBox listBoxCompanyComments;
habe ich den Namespace vor CustomListBox entfernt, jetzt tritt der Fehler nicht mehr auf.
Den wird dir der Designer aber wieder einbauen.
Das bedeutet aber das du etwas unsauber bei deinen namespaces warst.
Es gibt wahrscheinlich auch noch einebn Namespave xyz.PluginTest
Den wird dir der Designer aber wieder einbauen.
Das bedeutet aber das du etwas unsauber bei deinen namespaces warst.
Es gibt wahrscheinlich auch noch einebn Namespave xyz.PluginTest
Trotz mehrmaligem kompilieren, neu erstellen und bereinigen hat er nichts wieder eingebaut und den fehler habe ich auch nicht mehr zu gesicht bekommen.
Inwiefern unsauber?
Nein gibt es nicht.
Sobald du irgendwas an der Form im Designer machst, wird er dir alle Controls "neu" in den Code einschreiben.
Und dann wird da wieder der volle Namespace stehen.
Unsauber bedeutet,das man manchmal einen Namespace hat, der schon in einem anderen vorhanden ist ( beliebt das man den default namespace nicht beachtet der in den einstellungen steht).
( Okay Thema beendet, aber für mich sieht es eher so als hat der ctor deiner PluginTest.CustomListBox eine Exception ausgelöst was er jetzt nicht mehr tut. Oder aber ein abhängiges Assembly wurde tatsächlich nicht gefunden. An die Namespace Story glaube ich jedenfalls auch nicht.
@Sebastian.Lange
Sehe ich auch so... deshalb auch mein Vorschlag zu Debuggen was im Designer abgeht... aber dem wollte er ja nicht folgen...
Ich klinke mich hier auch aus.
Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...
@Sebastian.Lange
Sehe ich auch so... deshalb auch mein Vorschlag zu Debuggen was im Designer abgeht... aber dem wollte er ja nicht folgen...
Ich klinke mich hier auch aus.
Ich wollte schon, ich wusste nur nicht wie das geht.
Ich wollte schon, ich wusste nur nicht wie das geht.
Uuuuund das Problem ist wieder da. Habe mittlerweile herausgefunden dass es an der Klasse liegt, vermutlich wie Sebastian.Lange gemeint hat am Konstruktor. Ich habe die Klasse von codeproject, vielleicht kann sich jemand das Projekt mal anschauen.
Uuuuund das Problem ist wieder da. Habe mittlerweile herausgefunden dass es an der Klasse liegt, vermutlich wie Sebastian.Lange gemeint hat am Konstruktor. Ich habe die Klasse von codeproject, vielleicht kann sich jemand das Projekt mal anschauen.
Was wurde denn genau an der Klasse festgestellt?
Wie sieht der Konstruktor aus?
Ich weiß nichts, ob es was bringt sich das Projekt anzuschauen, weil es auf den ersten Blick eine relative gute Bewertung hat.
Somit könnte dein Problem evtl. sein, dass du das Wissen, welches dort schlummert, nicht so einsetzt, wie es der Autor beabsichtigt hat.
Wenn ich den Konstruktor ohne Argumente benutze
public CustomListBox()
{
InitializeComponent();
_imageSize = new Size(80, 60);
this.ItemHeight = _imageSize.Height + this.Margin.Vertical;
_fmt = new StringFormat();
_fmt.Alignment = StringAlignment.Near;
_fmt.LineAlignment = StringAlignment.Near;
_titleFont = new Font(this.Font, FontStyle.Bold);
_detailsFont = new Font(this.Font, FontStyle.Regular);
}
tritt der Fehler auf, weil ich dafür den standard Konstruktor auskommentieren/entfernen muss.
Wenn ich den standard Konstruktor
public CustomListBox(IContainer container)
{
container.Add(this);
InitializeComponent();
}
benutze, krieg ich nur den Klassennamen als Item angezeigt.
Hallo tyarr,
Ich hab leider überhaupt nicht verstanden was du mit
Ich krieg den Klassennamen als Item angezeigt
sagen wolltest und was heisst hier wenn ich den Konstruktor ohne Argumente benutze? Das ist der einzige Konstruktor der in diesem Szenario überhaupt eine Rolle spielt.
So oder so:
public CustomListBox(IContainer container)
(und container.Add(this) wird hier vermutlich 2x ausgeführt weil das in der InitializeComponent Methode auch noch mal so steht, also hier ist eine Exception eh schon mal garantiert)
Das ist nicht der Standard Konstruktor. Der Standard Konstruktor ist ohne Parameter und der Visual Studio Designer generiert auch nur Code um den Konstruktor ohne Parameter aufzurufen.(Ist streng genommen nicht richtig aber Ausflüge in den System.ComponentModel namespace würden zu weit führen) Diesen parameterlosen Konstruktir muss es geben und der sollte öffentlich sein. Alle anderen Konstruktoren kannst du gleich mal entfernen wenn du nicht vor hast irgendwelche CustomListBox Instanzen von Hand zu erstellen.
Im nächsten Schritt baue dir einen try/catch Block in diesen Ctor der im Catch den Fehler mit ner MessageBox anzeigt oder in eine Datei schreibt oder was auch immer.
So kriegst du den Fehler zumindest auch zur Design-Time erstmal mit und mit der Fehlermeldung kann dir dann hier zumindest auch geholfen werden.
Ich habe den Eindruck, das du deswegen in der Designer Datei rumgefummelt hast weil du in deiner CustomListBox einen Konstruktor mit Parametern hast die der Code in der Designer Datei aber einfach nicht aufrufen wollte. Also hast du das geändert damit er den Konstruktor mit Parametern aufruft. Kann das sein?