none
Click-Ereignis ohne Wirkung

    Frage

  • Hallo,

    in meinem in VB2008 geschriebenen Programm sollen beim Klick auf ein DataGridView-Steuerelement besitmmte Przeduren ausgeführt werden. Sobald ich aber das MouseDown-Ereignis des DataGridViews in Prgramm-Code aufnehmen, wird das Click-Ereignis nicht mehr ausgelöst! Leider brauche ich beide Ereignisse in meinem Program. Könnte mir jemand vieleicht eine Tipp geben?

    Gruß

    Christoph

    Montag, 25. Februar 2013 13:21

Alle Antworten

  • Hallo Christoph,

    kann ich so nicht nachvollziehen.

    Abonniert hatte ich Click, MouseDown und CellMouseDown und alle haben sich ordentlich gemeldet.

    Schau nach ob die Handles Anweisung noch da ist.

    Ansonsten, welchen Code führst Du in den Ereignissen aus?

    Gruß Elmar

    Montag, 25. Februar 2013 17:39
  • Hi Christoph ,

     ist ganz einfach . Ich bin noch nicht firm in VB.Net , darum mache ich alles praktisch . Nimm einfach eine Form mit einem Label für die Mousekoordinaten . Es ist vollkommen egal , wie Du die Form nennst . Hier Drawing2 , einen Menüstrip brauchst Du nicht , ich mache aber nie etwas ohne Menü , so wie ich nie in einen dunklen Keller gehe , gefällt mir einfach nicht , so habe ich unten ein Minni  Programm zusammengestellt .

    Als Form Ereignis nimmst DU : Form_Click , Mouse_Move, Mouse_Down , Mouse_UP,

    einfach links auf "Ereinisse" klicken , rechts wählen .

    "Form_Move ist nur Merker , damit man nicht Form und Mouse Ereignis verwechselt .

    Du schreibst in jedes Ereignis ein Stop

    Mittwoch, 27. Februar 2013 07:40
  • Public Class Drawing2
    
        Private Sub Drawing2_Click(sender As Object, e As System.EventArgs) Handles Me.Click
            Stop
        End Sub
    
        Private Sub Drawing2_MouseDown(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseDown
            Stop
        End Sub
    
        Private Sub Drawing2_MouseMove(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseMove
            MousKoord.Text = e.X & " , " & e.Y
            'Hochkomma erst nach erstem Start 
            'Stop
        End Sub
    
        Private Sub Drawing2_MouseUp(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseUp
            Stop
        End Sub
        Private Sub SchließenToolStripMenuItem_Click(sender As System.Object, e As System.EventArgs) Handles SchließenToolStripMenuItem.Click
            Close()
        End Sub
    
    
    
        Private Sub Drawing2_Move(sender As Object, e As System.EventArgs) Handles Me.Move
    
        End Sub
    End Class


    Mittwoch, 27. Februar 2013 07:41
  • Du startest das Programm und sofort stoppt es bei MouseMove. Also dieses ist das erste Ereignis , auf welches das Programm reagiert . Mit F5 wieder starten . Immer stoppt das Prog im Move Ereignis . Nach ProgAbbruch , machst Du hier ein Hochkomma (') , der Stopp ist nun in einem Rem , also ausgeschaltet . Du kannst die Mouse bewegen :  x,y Koordinaten werden im Label (ich habe es MousKoord genannt ) mit   MousKoord.Text = e.X & " , " & e.Y angezeigt .

     Private Sub Drawing2_MouseMove(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseMove
            MousKoord.Text = e.X & " , " & e.Y
            'Stop
        End SubProgramm wieder starten .

    Drückst Du die linke MouseTaste kommt der Stopp in Drawing2_MouseDown , nicht in Form_Click !

    Machst Du im MouseDown ein Hochkomma ist der Stopp im Fom_Click Ereignis .

    Du siehst VB.Net , auch VB6 wählt aus , sonst gibt es ein Durcheinander . So geht das nicht .

    Was machst Du ? ganz einfach !

    Du überlegst , wie das Programm arbeitet . Es ist einfach ein Leiharbeiter mit einem Auftrag , der Auftrag steht auf einem Zettel , dem Programm . Das Programm arbeitet also von oben nach unten . Nach einem Ereignis wird das nächste abgearbeitet . Im Programm oben wird es nie zum Form_Click Ereignis komm "Drawin2_Click ist ja schon vorbei , wenn ein Mouse Ereignis kommt . Also schreibst Du dem Leiharbeiter einen anderen Auftrag 

    Mittwoch, 27. Februar 2013 07:44
  • Public Class Drawing2
    
        Private Sub Drawing2_MouseUp(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseUp
            Stop
        End Sub
        Private Sub Drawing2_Click(sender As Object, e As System.EventArgs) Handles Me.Click
            Stop
        End Sub
    
        Private Sub Drawing2_MouseDown(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseDown
            Stop
        End Sub
    
        Private Sub Drawing2_MouseMove(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseMove
            MousKoord.Text = e.X & " , " & e.Y
            'Stop
        End Sub
    
        
        Private Sub SchließenToolStripMenuItem_Click(sender As System.Object, e As System.EventArgs) Handles SchließenToolStripMenuItem.Click
            Close()
        End Sub
    
    
    
        Private Sub Drawing2_Move(sender As Object, e As System.EventArgs) Handles Me.Move
    
        End Sub
    End Class
    Private Sub Drawing2_Click(sender As Object, e As System.EventArgs) Handles Me.Click
            Stop
        End Sub

    Mittwoch, 27. Februar 2013 07:44
  • Form_Click steht jetzt nach dem Mouse Ereignis , der Leiharbeiter hat den Auftrag "Form_ Click nach dem Mouse Ereignis und führt ihn aus . MuuseDown......MouseUp in dieser Reihenfolge .

    Wenn Du jetzt das Programm startest , stoppt es im Mouse Down Ereignis , nach Drücken von F8

    ist der Stopp im Form_Click Ereignis (Der MoseButton ist ja unten , nach dem Nächsten F8 Druck Der MouseButton ist ja oben ist der Stopp im Mouse Up Ereignis .

    Du hast gesehen , Die EreignisHandler gehören in die richtige Reihenfolge , also zwischen die Mouse Ereignissen , dann geht es .

    Ich hoffe , dass ich mit meinem Schmalspurwissen in VB.Net Dir helfen konnte .

    Beste Grüße Jürgen .

    P.S. das Form finde ich " blöd "u. schreibe immer die Form .

    Du siehst der Pc darf Dich nicht überlisten , so wie bei diesem Beitrag , der war zu lang , also 4 X senden . Die Fehlermeldungen sind in VB.Net , wie bei dem Server sehr irreführend , der Server meldet die Bilder müssen geprüft werden und bricht ab . In VB.Net kommt bei Dim asd as Bitmap =

    erst in den nachfolgenden Zeile eine nicht zutreffende Meldung

    Mittwoch, 27. Februar 2013 07:48
  • Hallo Elmar,

    ich habe es nochmal getestet und zwar an einem ganz einfachen Projekt mit nur einem DataGridView1 mit nur zwei Ereignissen: DataGridView1.Click  und  DataGridView1.Mousedown

    Solange die Ereignisprozedur "Handles DataGridView1.MouseDown" leer bleibt wird das Clic-Ereignis korrkt ausgelöst, sobald du da aber irgendeiner Prozdur reinscheibst, auch wenn es nur "Stop" ist wird nur MauseDown-Ereignis ausgelöst, Clik-Ereignis aber nicht mehr!!!

    Vielleicht ergibt dieses Verahlten irgend einen Sinn? Ich kann ihn aber nicht erkennen?!

    Gruß

    Christoph

    Donnerstag, 28. Februar 2013 14:15
  • Hallo Christoph,

    ich hatte mit Console.WriteLine getestet, und da ging alles glatt.

    Stop ist nicht gerade das beste zum Testen. Dabei wird die Kontrolle an den Debugger übergeben, womit sich Visual Studio dazwischen drängelt.

    Allgemein ist jede Unterbrechung in Windows Ereignissen problematisch; insbesondere Mausereignisse gehen an das aktive Fenster.

    Um etwas mehr zum Reproduzieren zu haben:
    Welcher Code soll faktisch dort ausgeführt werden - auf ein "nicht funktionierendes" Minimum reduziert?

    Gruß Elmar

    Donnerstag, 28. Februar 2013 16:27
  • Hi ,

     probier doch einfach mal aus , wie oben beschrieben . Mous-Up einfach als Dummy mit ' Dann das Click und danach MouseDown . Das geht .

    Ich frag mich aber , warum nimmst Du nicht Mouse_Down u. Mouse_Up Ereignis .

     Jürgen .

    Donnerstag, 28. Februar 2013 19:31
  • Hallo Elamar,

    Du hast einen guten Riecher gehabt: es war nicht das Ereignis selbst, sondern der darin enthaltene Code! In dem Ereignis wird eine " drag and Drop" - Funktion initiiert mit der User Daten in einen anderen DataGridView übertragen können:

    Private Sub dgvUsr_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles dgvUsr.MouseDown

      Dim dgv As DataGridView = DirectCast(sender, DataGridView)

      If e.Button = Windows.Forms.MouseButtons.Left Then

        dgv.DoDragDrop(M_DVUsr(M_CMUsr.Position).Item("DA_KUE"),  DragDropEffects.Copy)

      End If

    End Sub

    Also “dgv.DoDragDrop” ist die Ursache für dieses Verhalten. Entferne ich es aus dem Code, wir das Klick-Ereignis wieder ausgelöst!

    Gruß

    christoph

    Montag, 4. März 2013 08:51
  • Hallo Elmar,

    könntest Du mir vielleicht sagen, ob es sich bei diesen "Phänomen" um einen Fehler handelt oder aber ist es aus irgendeinem Grund so gewollt? Ich brauch beide Ereignisse in meinem Programm, hättest du vielleicht einen Tipp für mich?

    Gruß

    Christoph

    Donnerstag, 7. März 2013 06:41
  • Hallo Christoph,

    beim Drag 'n Drop Aktionen ist das "normal". Die Maus wird dabei "einfangen", damit Aktionen über Fenster hinweg ausgeführt werden können. Währenddessen werden anstatt dessen die Drag-Ereignisse ausgelöst. Mehr siehe:

    Drag & Drop-Funktionen in Windows Forms

    Gruß Elmar

    Donnerstag, 7. März 2013 11:10
  • Besteht das Problem auch wenn du anstelle des MouseDown-Events das MouseUp-Event nutzt?
    Ich weiß nicht warum, aber MouseDown hat bei mir auch mehrfach Probleme bereitet und konnte so behoben werden.

    Liebe Grüße Stefan | Cheers Stefan I'm using VB 2008 and VB 2010 Express Be a good forum member - mark posts that contain the answers to your questions or those that are helpful. c# in vb Translator: http://www.developerfusion.com/tools/convert/csharp-to-vb/

    Freitag, 8. März 2013 15:01