C# 活动公约

C# 活动公约,c#,events,xna,convention,C#,Events,Xna,Convention,我正在制作一个XNA游戏,我有一个关于赛事大会的问题。 我制作了一个有按钮的菜单,这些按钮有3个事件:onClick、onMouseEnter和onmouseeve Atm我的代码如下所示: public static void PlayonClick(Button sender, EventArgs args) { } public static void PlayonMouseEnter(Button sender, EventArgs args)

我正在制作一个XNA游戏,我有一个关于赛事大会的问题。 我制作了一个有按钮的菜单,这些按钮有3个事件:onClick、onMouseEnter和onmouseeve

Atm我的代码如下所示:

    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个event和eventargs将包含发生的内容(onClick、onMouseLeave、onMouseEnter)会更好

注意:onMouseCenter和onMouseLeave实际上对每个按钮都是相同的。所以我想把所有事件订阅到1方法


那么,他们实现这一目标的最佳方式是什么

假设在代码中附加处理程序:

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
}

您是否希望这些活动的内容相同?也就是说,
点击
鼠标移动
,和
鼠标移动
动作都做同样的事情(比如,它们都启动游戏的开始)。在这种情况下,您可以(也应该)将它们映射到同一个函数。如果它们正在做不同的事情,并且您打算在事件方法中使用
If(IsPlayClick){//do play}elseif(IsPlayMouseEnter){//highlight button}elseif(IsPlayMouseLeave){//remove highlight on button}
,那么您应该将它们映射到单独的(命名良好的)方法,让每个方法只做一件事。@ChrisSinclair Yes MouseEnter和MouseLeave将做同样的事。如果MouseEnter/MouseLeave有相同的代码,那么我建议考虑将它们映射到相同的事件(如Tim S.所示),并让
单击
映射到单独的事件处理程序。还考虑将事件处理程序方法命名为与预期操作匹配的名称。例如:
button.MouseEnter+=UpdatePlayButtonHighlight
button.MouseLeave+=UpdatePlayButtonHighlight
按钮。单击+=开始名称我在代码中附加它们,但我想知道是否最好使用PlayButtonEvent(按钮发送器,按钮状态),状态可以是MouseOver、Click或MouseLeave