2016-04-09 8 views
2

Ich mache eine Version des Microsoft-Spiels' Minesweeper '. Ich mache die Schaltflächen und Beschriftungen programmgesteuert und fügen zwei Handler für die Schaltflächen und einen Handler für die Labels wie folgt hinzu.Durch Klicken auf das Formular kann 'Objekt des Typs' <Namespace.FormName> 'nicht in den Typ' System.Windows.FormsButton 'umgewandelt werden.

AddHandler Newbtn.MouseDown, AddressOf Button_MouseDown 
AddHandler Newbtn.MouseUp, AddressOf Button_MouseUp 
AddHandler Newlbl.MouseDown, AddressOf Label_MouseDown 

dann habe ich drei Verfahren:

Private Sub Button_MouseUp(sender As Button, e As MouseEventArgs) Handles Me.MouseUp 
Private Sub Button_MouseDown(sender As Button, e As MouseEventArgs) Handles Me.MouseDown 
Private Sub Label_MouseDown(sender As Label, e As MouseEventArgs) Handles Me.MouseClick 

Alles funktioniert gut, bis ich außerhalb des Gitters von Schaltflächen auf dem Formular selbst klicken, wenn ich eine ‚InvalidCastException‘ zu bekommen. VS2015 geht in einen Unterbrechungszustand. An der Spitze steht:

"Ihre Anwendung ist in einen Unterbrechungsstatus eingetreten, aber es gibt keinen Code zum Anzeigen, da alle Threads externen Code ausgeführt haben (normalerweise System- oder Framework-Code)."

Weitere Informationen: Objekt des Typs 'Mines.MineSweeperPJS' kann nicht in den Typ 'System.Windows.Forms.Button' umgewandelt werden.

Mines ist der Namespace. MineSweeperPJS ist das Formular.

Alle Vorschläge zur Ursache dieses Problems würden sehr geschätzt werden!

Antwort

1

Das Problem ist in diesem Teil Ihres Event-Handler

..... Handles Me.MouseUp 
      ^^^ 

bedeutet dies, dass jeder mouseup oder mousedown- Ereignis auf dem Formular (Me) an die angegebenen Event-Handler übergeben werden.
Ich denke, dass Sie diese Event-Handler die Parameter sender von Object-Taste manuell geschrieben haben, zu ändern, denn wenn Sie den Formular-Designer seine eigene Vorlage verwenden, lassen Sie am Ende mit so etwas wie diesen

Private Sub Button_MouseUp(sender As Object, e As MouseEventArgs) Handles Newbtn.MouseUp 

Wenn die Form Motor Anrufe auf Diese Ereignisbehandlungsroutinen geben als Reaktion auf einen Formularmousedown oder Mouseup den Verweis auf das Formular selbst (Me) und nicht den Verweis auf einen Button weiter. Und das ist der Grund der ungültigen Besetzung.

Sie konnten die ...Handles Me.MouseUp entfernen, weil Sie bereits die Event-Handler die AddHandler verwenden und auch die sender Parameter eingerichtet haben wiederherstellen As Object

+0

Vielen Dank für die Antwort sein! Ich habe die Griffe entfernt und alles funktioniert perfekt. Meine Coding-Ausbildung kommt hauptsächlich von Google, wo ich nach Dingen suche, die ich nicht kenne :) Also wurden die Prozedur-Header höchstwahrscheinlich von hier eingefügt. Ich schätze solche Seiten und die Hilfe, die ihre Teilnehmer anbieten. Pete. – Pete

+0

Wenn ich darüber nachdenke, hast du recht, ich habe den Absender in Button und Label geändert. Einer meiner vielen Versuche, es zur Arbeit zu bringen. Ich habe auch viele Variationen an den Griffen ausprobiert, aber nie versucht, sie zu entfernen, ha :) – Pete

Verwandte Themen