Click-Ereignis ohne Wirkung
-
Montag, 25. Februar 2013 13:21
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
Alle Antworten
-
Montag, 25. Februar 2013 17:39Beantworter
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
-
Mittwoch, 27. Februar 2013 07:40
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:41
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:44
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:48
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
-
Donnerstag, 28. Februar 2013 14:15
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 16:27Beantworter
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 19:31
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 .
-
Montag, 4. März 2013 08:51
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
-
Donnerstag, 7. März 2013 06:41
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 11:10Beantworter
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
-
Freitag, 8. März 2013 15:01Besteht 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/

