delegate不求甚解版之:小新写检讨

小新又闯祸了,妈妈让他去写检讨, 小新会有两个选择:

1 亲自乖乖的去写
2  一本正经的对小白说:“小白,帮我写检讨吧,我请你吃心点”...

我们用C#来模拟一下这个场景。

首先画出一个窗体,代表小新。

先放2个Button,Text分别为“亲自写”和“拜托小白”。
再放1个TextBox,代表小新检讨的纸。

定义个函数,小新写检讨       
private void 写检讨(string str)
{
    textBox1.Text = str.Trim();
}

亲自写当然很简单,在“亲自写”按钮中的Click事件中调用“写检讨”即可。问题是调皮的小新打算让小白去写。

当然现在要创建小白窗体了。放一个按钮,Text为“替小新写检讨”。
在小白窗体类中,定义一个delegate:
public delegate void 写检讨Handler(string str);
注意到“写检讨Handler”的返回值和参数都和“写检讨”都一模一样。

然后定义小白写检讨这个具体的事件:
public 写检讨Handler 替小新写检讨;

好了,小新小白都有了,现在小新要召唤小白了。在 小新窗体中的“拜托小白”按钮的Click事件里写:
        private void button2_Click(object sender, EventArgs e)
        {
            // 召唤小白
            littleWhite xiaobai = new littleWhite();
            // 3 让小白知道该怎么写
            xiaobai.替小新写检讨 += new littleWhite.写检讨Handler(写检讨);           
            xiaobai.ShowDialog();
        }

聪明的小白被召唤出来了。小主人的要求当然得满足,于是在小白窗体的“替小新写检讨”的Click事件里写:
        private void button1_Click(object sender, EventArgs e)
        {
            // 小白替小新写检讨
            this.替小新写检讨("美芽我错了,汪汪~~");
            this.DialogResult = DialogResult.OK;
        }

好了,现在小新要请客小白吃心点了,不过妈妈看过以后估计要没收他所有的小熊饼干了。

完整代码见下:

小新窗体

using  System;
using  System.Collections.Generic;
using  System.ComponentModel;
using  System.Data;
using  System.Drawing;
using  System.Text;
using  System.Windows.Forms;

namespace  BossAsk
{
    
public partial class frmMain : Form
    
{
        
public frmMain()
        
{
            InitializeComponent();
        }


        
private void Form1_Load(object sender, EventArgs e)
        
{

        }


        
// 1 小新写检讨
        private void 写检讨(string str)
        
{
            textBox1.Text 
= str.Trim();
        }


        
/// <summary>
        
/// 亲自写
        
/// </summary>
        
/// <param name="sender"></param>
        
/// <param name="e"></param>

        private void button1_Click(object sender, EventArgs e)
        
{
            写检讨(
"美芽,我错了...");
        }



        
/// <summary>
        
/// 让小白去写
        
/// </summary>
        
/// <param name="sender"></param>
        
/// <param name="e"></param>

        private void button2_Click(object sender, EventArgs e)
        
{
            
// 召唤小白
            littleWhite xiaobai = new littleWhite();
            
// 3 让小白知道该怎么写
            xiaobai.替小新写检讨 += new littleWhite.写检讨Handler(写检讨);            
            xiaobai.ShowDialog();
        }

    }

}

小白窗体

using  System;
using  System.Collections.Generic;
using  System.ComponentModel;
using  System.Data;
using  System.Drawing;
using  System.Text;
using  System.Windows.Forms;

namespace  BossAsk
{
    
public partial class littleWhite : Form
    
{
        
public littleWhite()
        
{
            InitializeComponent();
        }


        
// 2 定义个代理,让小白模仿小新写检讨
        public delegate void 写检讨Handler(string str);
        
// 定义小白写检讨
        public 写检讨Handler 替小新写检讨;

        
private void littleWhite_Load(object sender, EventArgs e)
        
{

        }


        
private void button1_Click(object sender, EventArgs e)
        
{
            
// 4 小白替小新写检讨
            this.替小新写检讨("美芽我错了,汪汪~~");
            
this.DialogResult = DialogResult.OK;
        }

    }

}

这样的好处在于不必在小白窗体里引用小新窗体里的那张纸,降低窗体间的耦合度。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ki1381

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值