最近做的一个俄罗斯方块的游戏,在逻辑画布类中计算出目前的得分和速度等级,把结果及时的在界面类中显示出来,其中用到了委托、事件,并对此做了一下了解,代码如下: /// <summary> /// 传递的数据参数类 /// </summary> public class LevelChangeEventArgs : EventArgs { private int Level; private int Score; public LevelChangeEventArgs(int level, int score) { Level = level; Score = score; } public int LEVEL { get { return Level; } } public int SCORE { get { return Score; } } } /// <summary> /// 我的自定义委托 /// </summary> public delegate void LevelChangeEventHandler(object obj, LevelChangeEventArgs e); class GamePalette { /// <summary> /// LevelChange分数等级改变 事件 /// </summary> public event LevelChangeEventHandler LevelChange; /// <summary> /// 检查并删除满行,加分,改变速度等级 /// </summary> private void CheckAndDelFullRow() { ...... ...... ...... OnLevelChange(m_Level, m_Score);//引发事件 } /// <summary> /// 引发LevelChange事件的方法 /// </summary> /// <param name="Level">速度等级</param> /// <param name="Score">分数</param> public void OnLevelChange(int Level, int Score) { LevelChangeEventArgs e = new LevelChangeEventArgs(Level, Score); LevelChange(this, e); } /// <summary> /// 主窗体代码 /// </summary> public partial class MainForm : FatherFadeForm { private GamePalette m_GamePalette; private void MainForm_KeyDown(object sender, KeyEventArgs e) { m_GamePalette = new GamePalette(20, 30, m_BrickTemplateArray, 20,Color.Black, pictureBox1.CreateGraphics(), pictureBox2.CreateGraphics(), 0, Color.Blue, false); ...... ...... //绑定事件处理方法 m_GamePalette.LevelChange += new LevelChangeEventHandler(m_GamePalette_LevelChange); ...... ...... } /// <summary> /// LevelChange事件处理方法,显示当前等级和分数 /// </summary> public void m_GamePalette_LevelChange(object sender, EventArgs e) { LevelChangeEventArgs newe = (LevelChangeEventArgs)e; lblLevel.Text = newe.LEVEL.ToString(); lblScore.Text = newe.SCORE.ToString(); if (newe.LEVEL > 10) { MessageBox.Show("恭喜你,你通关了!"); } } }