2016-05-23 198 views
1

因此,我正在開發一個YouTube模擬遊戲。目前我正在YouTube網站上工作。在遊戲中,您應該可以自定義您的頻道頭像和橫幅。所以,就像在真實的YouTube網站上一樣,我創建了兩個按鈕,點擊後打開一個OpenFileDialog,其中玩家應該選擇圖片文件。唯一的問題是,出於某種原因你不能點擊按鈕。 這裏的形式看起來像什麼:無法點擊按鈕

The Form in the Designer

這裏是我的代碼:

#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 

任何幫助將apprechiated!

〜米卡/ OneByte_

+2

您不應手動創建事件處理程序,在代碼編輯器窗口中使用下拉列表或將屬性窗格視圖更改爲事件,然後單擊所需的事件處理程序。 'EditAvatar'不是合法的事件簽名 – Plutonix

+0

這是在鼠標進入/離開時試圖顯示/隱藏按鈕時發生的錯誤。我前一陣子碰到了這個,讓我檢查我的代碼併爲你寫一個答案... –

+0

要添加到Plutonix的評論中,您顯示的事件處理程序的參數應爲'(sender 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'。 –