2016-04-09 8 views
2

Microsoftゲームのバージョンを作成しています。ボタンとラベルをプログラムで作成し、ボタン用に2つのハンドラを、ラベル用に1つのハンドラを次のように追加します。フォームをクリックすると、 '<Namespace.FormName>'タイプのオブジェクトを 'System.Windows.Forms.Button'にキャストできません。

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

、私は3つの手順があります:私は「InvalidCastExceptionが」得るとき、私は、フォーム自体のボタンのグリッドの外側をクリックするまで

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 

をすべてが正常に動作します。 VS2015はブレーク状態になります。先頭に「

"あなたのアプリケーションはブレーク状態になりましたが、すべてのスレッドが外部コード(通常はシステムコードまたはフレームワークコード)を実行していたために表示するコードがありません。

追加情報: 'Mines.MineSweeperPJS'タイプのオブジェクトを 'System.Windows.Forms.Button'とタイプすることができません。

Minesはネームスペースです。 MineSweeperPJSはフォームです。

この問題の原因に関するご意見をお待ちしております。

答えて

1

問題が

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

これはあなたのフォーム(Me)上のすべてのmouseup、またはマウスダウンイベントが指定されたイベントハンドラに渡されることを意味し、あなたのイベントハンドラのこの部分です。
私はあなたがフォームデザイナを使用すると、この

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

形エンジンの呼び出しのようなもので終わる独自のテンプレートを使用させている場合ので、このイベントハンドラは、手動ボタンにObjectからパラメータsenderを変更書かれていることを考えますこれらのイベントハンドラは、フォームのマウス操作またはマウスアップに応答して、フォーム自体(Me)への参照であり、ボタンへの参照ではありません。そして、これが無効なキャストの理由です。

あなたはすでにAddHandler命令を使用してイベントハンドラを設定しているので、...Handles Me.MouseUpを削除しても答えのために非常に多くのAs Object

+0

感謝するsenderパラメータを復元することができます!私はハンドルを取り外し、それはすべて完璧に動作します。私のコーディング教育は、ほとんど私が私が知らない事を検索するグーグルから来ている:)したがって、プロシージャのヘッダーはここからコピーされた可能性が最も高いです。私は本当にこのようなサイトと参加者の助けに感謝します。ピート。 – Pete

+0

実際、それについて考えると、あなたは正しいです。送信者をボタンとラベルに変更しました。私が試して働かそうとする試みの一つです。私もハンドルの多くのバリエーションを試したが、その後、削除してみたことはありません:) – Pete

関連する問題