Page 1 of 1

Löschen von Usercontrols aus Zellen

Posted: 07.11.2007, 14:35
by eoe
Hallo Thorsten,

ich habe da ein erneutes kleines Problem mit dem Grid entdeckt, was wir bereits auch schon mal kurz diskutiert hatten. Trotzdem packe ich die Sache in einen neuen Thread.

Prinzipiell geht es mir wieder um das Löschen einzelner Zellen aus dem Grid, die Usercontrols enthalten. Das Löschen bezieht sich dabei ausschließlich auf das Löschen der UserControls (Edit + Display) mit Hilfe der dafür vorgesehenen Funktionen. Die Zelle (Spalte) an sich soll bestehen bleiben und einfach nur leer sein.

Die Beispielanwendung schicke ich dir wieder via Mail. Anbei noch die Vorgehensweise, mit der du den Fehler provozieren kannst. In meiner richtigen Anwendung kommt er häufiger, aber ich denke es handelt es sich um das gleiche Problem.

1. Selektiere die Zelle 2-1, in dem du auf dieses Label klickst
2. Lösche die Zelle mit dem Button.
3. Selektiere die Zelle 1-1 (wieder mit dem Label).
4. Schließe die Applikation
5. Es erscheint folgender Fehler:

System.NullReferenceException: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.
at ppsGrid.GridCell.AfterEdit(Boolean committ)
at ppsGrid.Grid.OnLostFocus(EventArgs e)
at System.Windows.Forms.Control.WmKillFocus(Message& m)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.ScrollableControl.WndProc(Message& m)
at System.Windows.Forms.ContainerControl.WndProc(Message& m)
at System.Windows.Forms.UserControl.WndProc(Message& m)
at System.Windows.Forms.ControlNativeWindow.OnMessage(Message& m)
at System.Windows.Forms.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

Wenn man das obige Prozedere etwas abändert, und die Selektion der ersten Zelle mit Hilfe der Textbox vornimmt (es verschwindet die Zeilenselektion), und dann alle anderen Schritte analog ausführt (allerdings die Zelle im Schritt 3 wieder mit der Textbox selektiert), kommt die Fehlermeldung nicht.

Ich denke und hoffe, dass das für dich nur ein kleines Problem sein sollte.

Erik

Posted: 09.11.2007, 12:20
by torsten
Hallo Erik
Fehler gefunden und behoben...

Die neue Version 1.3.4.1 steht bereits auf der Webseite zur Verfügung.
Nochmals besten Dank für die Hilfe

Gruß Torsten

Posted: 09.11.2007, 17:43
by eoe
Hi Torsten,

es ist ja hier die Frage, wer wem hilft, oder? : :wink:

Danke für deine schnelle Hilfe, werde die Sache nachher gleich mal testen und dann spätestens am Montag sagen, ob alles funktioniert wie gedacht!

Schönes WE

Erik

Posted: 09.11.2007, 18:01
by eoe
Hallo Torsten,

in der Demo Appliaktion ist das Problem gelöst. In einer größeren Anwendung habe ich aber immer noch das Problem. Es ist immer wieder der AfterEditEvent, das in verschiedenen Situationen hochkommt. Anbei erst einmal die Fehlermeldungen. Konnte sie aber noch nicht in der Testanwendung nachstellen
Nr 1:

System.NullReferenceException: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.
at ppsGrid.GridCell.AfterEdit(Boolean committ)
at ppsGrid.Grid.OnMouseDown(MouseEventArgs e)
at System.Windows.Forms.Control.WmMouseDown(Message& m, MouseButtons button, Int32 clicks)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.ScrollableControl.WndProc(Message& m)
at System.Windows.Forms.ContainerControl.WndProc(Message& m)
at System.Windows.Forms.UserControl.WndProc(Message& m)
at System.Windows.Forms.ControlNativeWindow.OnMessage(Message& m)
at System.Windows.Forms.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, I

Nr 2:

System.NullReferenceException: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.
at ppsGrid.GridCell.AfterEdit(Boolean committ)
at ppsGrid.Grid.OnLostFocus(EventArgs e)
at System.Windows.Forms.Control.WmKillFocus(Message& m)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.ScrollableControl.WndProc(Message& m)
at System.Windows.Forms.ContainerControl.WndProc(Message& m)
at System.Windows.Forms.UserControl.WndProc(Message& m)
at System.Windows.Forms.ControlNativeWindow.OnMessage(Message& m)
at System.Windows.Forms.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPt

Erik

Posted: 12.11.2007, 09:25
by eoe
Hallo Torsten,

also auch mit der Version von Freitagabend ist das Problem nicht in den Griff zu bekommen. Ich habe mal mein integriertes Control zu Testzwecken etwas angepasst und nur eine Textbox verwendet. In diesem Fall schaffe ich es nicht, irgendeinen Fehler zu verursachen. Ich habe das Gefühl, das die Zelle anders fokussiert wird, wenn man in eine Textbox klickt. Die einfache Selektion der Zelle über ein Label scheint etwas anderes zu bewirken.

Erik

Posted: 12.11.2007, 10:21
by eoe
Hi Torsten,

ich habe mir jetzt einen kleinen Workaround geschaffen. Die Ursache für den Fehler war logischerweise das zurücksetzen des Edit Controls.

Um eine Arbeitsfähige Lösung zu erhalten, habe ich mir jetzt einfach ein Dummy Control geschaffen, das eine gleich lautende Eigenschaft zum setzen und laden der Eigenschaft hat. Ist zwar kein wirklicher workaround, aber für mich doch eine erste kleine Lösung…

Wenn ich die Zeit finde, werde ich noch einmal versuchen, den Fehler im Testsystem zu provozieren.

Erik

Posted: 13.11.2007, 19:39
by torsten
Hallo Erik
Also lass ich die Version 1.3.4.1 erstmal so wie sie ist.
Wen du mehr Infos hast zu dem Fokus-Problem (Ist es ein UserControl?), dann sagt mir bitte Bescheid, ok?

Gruß Torsten

Posted: 14.11.2007, 15:01
by eoe
Hi Torsten,

was soll ich sagen, nach langem Kampf, vielen Testversionen später ist das Problem erkannt und zumindest bei mir gebannt :-). Nachdem ich alles in einem Demoprojekt so nachgebaut hatte wie in meiner Applikation, musste ich feststellen es ging! Dann den etwas vereinfachten Code genommen und in die Anwendung integriert. Nichts ging mehr. Eines war in meinem Demoprojekt aber anders. Anstelle der „Nicht Standardbuttons“ hatte ich normale Buttons verwendet. Die nicht Standardbuttons besitzen die Eigenschaft, dass sie keinen Focus bekommen können. Und das war das Problem. Immer nach dem Löschen der Zelle wollte das Grid auf diesen Butten den Fokus setzen, und das ging halt an der Stelle nicht. Das erklärt auch, warum das löschen immer dann funktioniert hat, wenn der Cursor zuletzt in der Textbox des Zellenelements gewesen ist. Also ändere ich jetzt im Vorfeld der Löschaktion den Fokus auf ein Element (z.B. eine Groupbox) und schon geht’s :-).

Vielleicht kannst du das ja bei Gelegenheit mal prüfen und noch fixen, bevor andere über diese Stelle stolpern.

Erik