关于扫雷游戏学习笔记(二)

用户控件与窗体之间的传值:要实现当MineField中扫雷成功或失败,笑脸图标做出相应的改变。


1、通过构造函数传参

//MineField类中
public PictureBox smile;

public MineField(PictureBox pb)
{ 
      smile=pb;
      InitializeComponent();
}

//在Form.Designer中的InitializeComponent里加入
this.mineField1 = new Mine.MineField(pictureBox1);

这样在MineField中便可以直接调用外面的PictureBox了。
但是会存在一个问题:窗体设计器生成的代码最好不要去修改,每次只要设计窗口一变动,Form.Designer里的代码就会重新生成,你添加的

this.mineField1 = new Mine.MineField(pictureBox1);

便无效,Form[设计]还会报很奇怪的异常。
2、通过事件触发机制

//在MineField中

 public delegate void MineSweepedEventSuccessfullyHandler();
public event MineSweepedEventSuccessfullyHandler   MineSweepedSuccessfully;

 public delegate void MineSweepedFalledHandler();
 public event MineSweepedFalledHandler MineSweepedFalled;


 public void Falling()
        {
            if (MineSweepedFalled != null)
            {
                MineSweepedFalled();
            }
        }

        public void Successful()
        {
            if (MineSweepedSuccessfully != null)
            {
                MineSweepedSuccessfully();
            }
        }
   if(扫雷成功)  Successful();
   if(扫雷失败)  Falling();        //触发事件
 

//Form中 

 private void Form1_Load(object sender, EventArgs e)
        {
            this.mineField1.Init(10, 10);
            this.mineField1.MineSweepedFalled +=事件处理函数名;
      this.mineField1.MineSweepedSuccessfully += 事件处理函数名;
        }  

通过这个例子,我对事件这个概念有了更进一步的了解。

 

原文地址:https://www.cnblogs.com/zuochengsi-9/p/4661696.html