2016-05-21 20 views
0

Ich arbeite an einem Projekt, für das ich ein benutzerdefiniertes Steuerelement entworfen habe, und ich versuche, es hinzuzufügen und in einem Gruppenfeld zu suchen.C# - Position des benutzerdefinierten Steuerelements in GroupBox ändern (gibt Nullreferenzausnahme zurück)

Die Schritte zum Initialisieren und Hinzufügen des Steuerelements zur Box funktionieren einwandfrei, aber alles, was ich versuche, das Steuerelement zu verschieben oder zu ändern, verursacht eine Ausnahme.

 //initialise using object in outputs collection 
     VitalsVisual vitalsVisual = vitalOutputs.getVitalsVisual(); 
     //add to relevant groupbox 
     grpbxIntraOp.Controls.Add(vitalsVisual); 
     //change location (coordinates within groupbox) 
     vitalsVisual.Location = new Point(249, 256); //THROWS EXCEPTION 
     //resize 
     vitalsVisual.Size = new Size(494, 342); //THROWS EXCEPTION IF REACHED 

Alles, was ich auf eine der beiden angegebenen Linien erhalten, ist „Objektverweis nicht auf eine Instanz eines Objekts festgelegt“. Ich verstehe das nicht wirklich, da es darauf hinweist, dass die VitalsVisual vitalsVisual nicht initialisiert wird, aber der Konstruktor aufgerufen wird und der Controls.Add() Befehl funktioniert. Sicher, wenn es nicht initialisiert worden wäre, würde dieser Befehl dieselbe Ausnahme auslösen.

Kann jemand sehen, was hier falsch sein könnte? Würde einen Schubs in die richtige Richtung wirklich schätzen!

Danke, Mark

+0

Gibt 'getVitalsVisual' tatsächlich einen Wert zurück oder gibt es null zurück? Was erbt das 'VitalsVisual'-Steuerelement? – kagelos

+0

Die vorgeschlagene Antwort erklärt, warum Sie das Problem nicht richtig debuggen konnten, aber das Problem nicht wirklich löst, d. H. Dass Sie eine Nullreferenz haben. Bitte lesen Sie den ausführlichen Ratschlag in dem markierten Duplikat, wie Sie eine "NullReferenceException" debuggen können, so dass Sie zu einem Punkt kommen können, wo Ihre Frage spezifischer ist als "Warum bekomme ich diese Ausnahme?" Wenn Sie zu diesem Zeitpunkt noch Probleme haben, stellen Sie eine neue Frage, in der Sie eine gute Frage gestellt haben, die das Problem zuverlässig reproduziert, zusammen mit einer genauen Erklärung dessen, mit welchem ​​Problem Sie Schwierigkeiten haben. –

+0

Kein Duplikat, da er fälschlicherweise angenommen hatte, dass ein Steuerelement zu einer Controls-Auflistung hinzugefügt werden kann, kann nicht null sein. Ich habe erklärt, warum dies eine falsche Annahme ist. Das Debugging von 'getVitalsVisual' ist der nächste Schritt, aber nicht die Frage, wirklich. – TaW

Antwort

1

Interessant, aber das ist von Entwurf.

Test:

Button button = null; 
this.Controls.Add(button); 
button.Location = Point.Empty; 

Dies macht genau das gleiche, das heißt es an der letzten Linie wirft, nicht, wenn Zugabe ..

So ist es null hinzuzufügen versuchen, erlaubt objectes zu einer Sammlung.

Ich schrieb 'versuchen', weil die Controls.Add tatsächlich leise versagt:

Button button = null; 
Console.WriteLine(this.Controls.Count + " controls now."; 
this.Controls.Add(button); 
Console.WriteLine("Still " + this.Controls.Count + " controls."; 

Keine Änderungen in der Zählung.

Ein Blick auf die sources bestätigt dies:

public virtual void Add(Control value) { if (value == null) return; ...

So zusammenzufassen: Ihre Funktion gibt sicherlich ein Null-Objekt, aber der Fehler unterdrückt wird. Ist es ein Fehler oder eine Funktion?