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;
        }

    }

}

這樣的好處在於不必在小白窗體裡引用小新窗體裡的那張紙,降低窗體間的耦合度。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值