Laden...

Exception beim Öffnen des WinForm-Designers

Erstellt von wackelkontakt vor 12 Jahren Letzter Beitrag vor 12 Jahren 1.367 Views
wackelkontakt Themenstarter:in
109 Beiträge seit 2011
vor 12 Jahren
Exception beim Öffnen des WinForm-Designers

Hallo,

ich habe eine Basisklasse eines UserControls. Wenn ich versuche den Designer einer geerbten Klasse zu öffnen bekomme ich folgende Exception:

Fehlermeldung:
Exception:
Object reference not set to an instance of an object.

Stack trace:
at ...\ControlGridControlBase.cs:line 597

Wenn ich die besagte Zeile (befindet sich in einem GridControlVisibleChanged-Handler) auskommentiere funktioniert wieder alles wie es soll.

Was ist der Grund dafür das während der Designzeit irgendwelche Methoden durchlaufen werden?

Es ist nicht so das mich diese Sache in meiner Arbeit behindert aber da es jetzt schon zu einem zweiten, ähnlichen Fehler in einem GridViewCalcRowHeight- Handler kommt will ich nun doch wissen was der Grund ist.

Könnt ihr mir vielleicht helfen?

Um Rekursion zu verstehen, muss man erst mal Rekursion verstehen, muss man erst mal Rekursion verstehen, ....

6.911 Beiträge seit 2009
vor 12 Jahren

Hallo,

was macht denn der Code an besagter Stelle?

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

T
94 Beiträge seit 2007
vor 12 Jahren

Du mußt auch berücksichtigen, dass der Designer zum Erstellen und Zeichnen deines UserControls natürlich das UserControls selber erzeugen muß. Das schließt auch mit ein, dass bestimmte Events ausgelöst werden, wie z.B. OnPaint, OnResize usw. Evtl. hast du ein Event in deinem UserControl implementiert, welches zur Designzeit nicht vollständig lauffähig ist oder aber auch gar nicht ausgeführt werden braucht. In diesem Fall kannst du das Property DesignMode abfragen und entsprechend darauf reagieren.

wackelkontakt Themenstarter:in
109 Beiträge seit 2011
vor 12 Jahren

Vielen Dank für die Antworten,

hier der Code für den Event-Handler:


        private void GridControlVisibleChanged(object sender, EventArgs e)
        {
            if (gridControl.Visible)
            {
                      barEditItemTableMilestone.EditValue = (from m in ProjectPlanning.Milestone
                                                            where m.Guid == DataSource.Milestone
                                                            select m).FirstOrDefault();
            }
        }

Ich setze nur den EditValue eines Bar-Items (wir verwenden komplett die Controls von DevExpress).

@tabstop: der Tip mit der Property funktioniert. Aber ich sehe das eher als ein Workaround als die Lösung an. Sehe ich das richtig?

Um Rekursion zu verstehen, muss man erst mal Rekursion verstehen, muss man erst mal Rekursion verstehen, ....

2.298 Beiträge seit 2010
vor 12 Jahren

Die Lösung wäre dafür zu sorgen, dass der EventHandler im Designmodus nicht erst aufgerufen wird. Das bedeuted, du darfst das Event halt erst binden, wenn dein Control in der Ausführung ist.

Wissen ist nicht alles. Man muss es auch anwenden können.

PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager |

49.485 Beiträge seit 2005
vor 12 Jahren

Hallo wackelkontakt,

der Tip mit der Property funktioniert. Aber ich sehe das eher als ein Workaround als die Lösung an. Sehe ich das richtig?

nein, das ist nicht zwangsläufig ein Workaround. Kommt natürlich immer auf den Einzelfall an, aber es ist nicht unüblich, dass sich ein Control im DesignModus anders verhält / verhalten soll/muss, als zur Laufzeit.

herbivore