Probleme mit UserControl

  • VB.NET

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von ExteNesia.de.

    Probleme mit UserControl

    Hey,

    ich habe folgendes Problem und hoffe, dass mir hier jemand weiterhelfen kann.

    Ich habe ein UserControl welches aus einer PictureBox und einem Lable besteht. Es funktioniert wunderbar, nur bei Events macht es Probleme.

    Das Programm erstellt zur Laufzeit eine Anzahl dieser UserControls äquivalent zur Anzahl an Einträgen in einer Datenbank. Funktioniert gut soweit.

    Jetzt soll diesen UserControls eine Art Drag&Drop ermöglicht werden. Mit AddHandler weise ich den UserControls folgende Events zu:

    VB.NET-Quellcode

    1. Private isTracking As Boolean
    2. Private ex, ey As Integer
    3. Private Sub PictureLable_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs)
    4. isTracking = True
    5. ex = e.X 'x-Koordinate der Maus von der linken oberen Ecke der PictureBox gemessen
    6. ey = e.Y 'y-Koordinate der Maus von der linken oberen Ecke der PictureBox gemessen
    7. End Sub
    8. Private Sub PictureLable_MouseMove(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs)
    9. If (isTracking = True) And (e.Button = MouseButtons.Left) Then
    10. Dim px As Integer = Control.MousePosition.X - ex
    11. Dim py As Integer = Control.MousePosition.Y - ey
    12. Dim p As Point = New Point(px, py)
    13. sender.Location = New Point(TabPage2.PointToClient(p))
    14. End If
    15. End Sub
    16. Private Sub PictureLable_MouseUp(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs)
    17. isTracking = False
    18. End Sub


    Leider funktioniert das ganze so nicht. Es tut sich überhaupt nichts. Wenn ich aber selbiges mit einer normalen PictureBox(selbe Bedingungen) versuche, funktioniert es reibungslos. Wo liegt hier mein Fehler?

    Im UserControl selbst habe ich folgendes schon ausprobiert:

    VB.NET-Quellcode

    1. Private Sub PictureLable1_MouseDown(ByVal sender As Object, e As MouseEventArgs) Handles PictureBox1.MouseDown, Label1.MouseDown
    2. Me.OnMouseDown(MouseEventArgs.Empty)
    3. End Sub
    4. Private Sub PictureLable1_MouseMove(ByVal sender As Object, e As MouseEventArgs) Handles PictureBox1.MouseMove, Label1.MouseMove
    5. Me.OnMouseMove(MouseEventArgs.Empty)
    6. End Sub
    7. Private Sub PictureLable1_MouseUp(ByVal sender As Object, e As MouseEventArgs) Handles PictureBox1.MouseUp, Label1.MouseUp
    8. Me.OnMouseUp(MouseEventArgs.Empty)
    9. End Sub


    Wenn ich das Event allerdings auslöse, bekomme ich immer diese Fehlermeldung:
    "Ein Ausnahmefehler des Typs "System.InvalidCastException" ist in anwendung.exe aufgetreten.

    Zusätzliche Informationen: Das Objekt des Typs "System.EventArgs" kann nicht in Typ "System.Windows.Forms.MouseEventArgs" umgewandelt werden."

    Wie bekomme ich es denn hin, dass mein Event mit dem "PictureLable" so funktioniert, wie es mit der normalen PictureBox auch klappt?

    Vielen Dank im Voraus.

    xDkpMan

    xDkpMan schrieb:

    "Ein Ausnahmefehler des Typs "System.InvalidCastException" ist in anwendung.exe aufgetreten.
    Statt MouseEventArgs.Empty solltest Du das Argument e durchreichen, damit unten die korrekten Informationen ankommen.
    Wenn Du D&D implementieren willst, musst Du diese Events ebenfalls behandeln und oder durchreichen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    xDkpMan schrieb:

    "Ein Ausnahmefehler des Typs "System.InvalidCastException" ist in anwendung.exe aufgetreten.
    Dringend empfohlen: Visual Studio - Empfohlene Einstellungen
    Weil mit Strict On würde dieser Fehler bereits im Editor bemeckert.

    Und vmtl. tritt der Fehler eh in einer Code-Zeile auf, die hier garnet gezeigt ist.
    Manchmal kann man das Projekt, wenn keine der Lösungen klappt, speichern und ohne Visual Studio zum laufen bringen. Das funktioniert nicht immer, aber es wär auch das letzte, was du tust.

    Grüße, ExteNesia.de