2016-05-23 11 views
1

私はYouTubeシミュレーションゲームを開発しています。現在私はYouTubeのウェブサイトに取り組んでいます。ゲームでは、あなたのチャンネルのアバターとバナーをカスタマイズすることができるはずです。実際のYouTubeサイトと同様に、2つのボタンを作成しました。クリックするとOpenFileDialogが開き、プレーヤーは画像ファイルを選択する必要があります。唯一の問題は何らかの理由でボタンをクリックできないことです。ボタンをクリックできない

The Form in the Designer

そして、ここに私のコードです:任意の助けがapprechiatedされるだろう

#Region "Edit Buttons" 
    Sub ShowEditBanner() Handles BannerBox.MouseEnter 
     BannerEditButton.Visible = True 
     AvatarEditButton.Visible = True 
     BannerEditButton.BringToFront() 
     AvatarEditButton.BringToFront() 
    End Sub 

    Sub ShowEditAvatar() Handles AvatarBox.MouseEnter 
     BannerEditButton.Visible = True 
     AvatarEditButton.Visible = True 
     BannerEditButton.BringToFront() 
     AvatarEditButton.BringToFront() 
    End Sub 

    Sub HideEditBanner() Handles BannerBox.MouseLeave 
     BannerEditButton.Visible = False 
     AvatarEditButton.Visible = False 
    End Sub 

    Sub HideEditAvatar() Handles AvatarBox.MouseLeave 
     BannerEditButton.Visible = False 
     AvatarEditButton.Visible = False 
    End Sub 
#End Region 

    Sub EditAvatar() Handles AvatarEditButton.Click 
     If AvatarFileDialog.ShowDialog = DialogResult.OK Then 
      Try 
       Dim Img As Image = Image.FromFile(AvatarFileDialog.FileName) 
       AvatarBox.Image = Img 
      Catch ex As Exception 
       MsgBox("Invalid file.", MsgBoxStyle.Critical, "Error") 
      End Try 
     End If 
    End Sub 

はここで、フォームは次のようになります!

〜ミカ/ OneByte_あなたが経験している何

+2

手動でイベントハンドラを作成したり、コードエディタウィンドウでドロップダウンを使用したり、プロパティペインビューをイベントに変更したりして、必要なイベントハンドラをクリックしないでください。 'EditAvatar'は合法的なイベント署名ではありません – Plutonix

+0

これは、マウスが出入りするときにボタンを表示/非表示にしようとするときに発生するバグです。私はしばらく前にこれにぶつかりました。私のコードをチェックして答えを書いてみましょう... –

+0

Plutonixのコメントに追加するには、表示したイベントハンドラの引数は '(Send As As Object、e As EventArgs) 'を実行します。 [Option Strict On](https://msdn.microsoft.com/en-us/library/zcd4xwzs.aspx)を使用すると、そのような問題が指摘されます。 –

答えて

1

は、ボタンのMouseEnterイベントがAvatarBoxのMouseLeaveイベントは、それを隠そうとしたときと同じ時間にボタンを表示しようとしたときに起こるバグです。

これを修正するには、マウスがまだコントロールの境界内にある場合はMouseLeaveイベントをチェックインするだけです。そうでない場合:ボタンを非表示にします。

If AvatarBox.ClientRectangle.Contains(Me.PointToClient(Cursor.Position)) = False Then 
    AvatarEditButton.Visible = False 
End If 

ロジックは、両方のコントロールに適用されます。

+0

それはちょっと働いた。 AvatarEditButtonはクリックできますが、BannerEditButtonはクリックできません。私のコードは次のようになります:http://pastebin.com/4RidjS8A –

+0

@OneByte_:正しいボタンとコンテナの名前に変更するだけで、同じ方法が 'BannerBox.MouseLeave'にも当てはまります。私はちょうどそれらの両方を書いて気にしなかった:)。 **編集:**あなたのコードで見るように、 'HideEditBanner()'メソッド全体を削除し、代わりにこのように他のメソッドを宣言することができます: 'Sub HideEditAvatar()はAvatarBox.MouseLeave、BannerBox.MouseLeave'を処理します。 –

関連する問題