2012-10-09 33 views
0

我正在製作一款XNA遊戲,並對事件的約定有疑問。 我做了一個有按鈕的菜單,這些按鈕有3個事件:onClick,onMouseEnter和onMouseLeave。活動約定

大氣壓我的代碼看起來是這樣的:

public static void PlayonClick(Button sender, EventArgs args) 
    { 

    } 
    public static void PlayonMouseEnter(Button sender, EventArgs args) 
    { 

    } 
    public static void PlayonMouseLeave(Button sender, EventArgs args) 
    { 

    } 

此代碼將重複在菜單中每個按鈕。 現在,我認爲這將是,如果有1個事件和EventArgs的將包含發生了什麼(的onClick,OnMouseLeave在,OnMouseEnter在)

注更好:OnMouseEnter在和OnMouseLeave在是acttualy每一個按鈕相同。所以我想訂閱所有事件到1個方法

那麼,他們最好的方式來實現這個?

+0

您是否打算這些事件的_content_是相同的?也就是說,'Click','MouseEnter'和'MouseLeave'動作都做同樣的事情(比如說,它們都會啓動遊戲的開始)。在這種情況下,您可以(也應該)將它們映射到相同的功能。如果他們正在做不同的事情,並且你打算在你的事件方法中使用if(IsPlayClick){// play play} elseif(IsPlayMouseEnter){//突出顯示按鈕} elseif(IsPlayMouseLeave){//移除按鈕上的突出顯示}你應該將它們映射到單獨的(有名的)方法,並讓每個方法只做一件事和一件事。 –

+0

@ChrisSinclair是MouseEnter和MouseLeave會做同樣的事情。 – Svexo

+1

如果MouseEnter/MouseLeave具有相同的代碼,那麼我建議考慮將它們映射到相同的事件(如Tim S.所示)並將'click'映射到單獨的事件處理程序。還要考慮命名事件處理程序方法,使其與預期操作相匹配。例如:'button.MouseEnter + = UpdatePlayButtonHighlight;''button.MouseLeave + = UpdatePlayButtonHighlight;''和'button.Click + = StartGame;' –

回答

0

假設你在代碼中附加的處理程序:

button.onClick += PlayonEvent; 
button.onMouseEnter += PlayonEvent; 
button.onMouseLeave += PlayonEvent; 

如果在XAML連接,做同樣的事情,這是簡單地說,所有的事件都是由相同的處理程序處理。無論哪種方式,定義這樣一個處理程序,如:

public static void PlayonEvent(Button sender, EventArgs args) 
{ 
    // do something based on EventArgs, which can give you an idea of what's going on 
} 
+0

我將它們附加在代碼中,但我想知道是否會更好PlayButtonEvent(Button Sender,ButtonState狀態)和狀態可以是MouseOver,Click或MouseLeave – Svexo