单播委托
有难点,两个窗口如何传值呢???
用到了委托的概念,类似于传一个方法。
也很简单。具体看代码。
需求:窗口1 有一个按钮 点一下,弹出窗口2。窗口2有一个输入框和按钮,点一下按钮将输入框的值显示到窗口1的label上。
窗口1的代码
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace WindowsFormsApp1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
// new 窗口2的时候 把方法传进去
private void button1_Click(object sender, EventArgs e)
{
Form2 Form2 = new Form2(ShowMsg);
Form2.ShowDialog();
}
//改变 窗口的具体方法。
private void ShowMsg(string str)
{
label1.Text = str;
}
}
}
窗口2的代码
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace WindowsFormsApp1
{
//1.声明一个委托
public delegate void CeShi(string str);
public partial class Form2 : Form
{
// 2.声明一个委托变量
public CeShi _ceShi;
public Form2(CeShi ceShi)
{
// 3.将传来的方法指向委托类。
_ceShi = ceShi;
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
//4. 执行方法
_ceShi(textBox1.Text);
}
}
}
多播委托
一个委托对象可以指定多个函数
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace _15多播委托
{
public delegate void DelTest();
class Program
{
static void Main(string[] args)
{
DelTest del = T1;
del += T2;
del += T3;
del+= T4;
del -= T3;
del -= T1;
del();
Console.ReadKey();
}
public static void T1()
{
Console.WriteLine("我是T1");
}
public static void T2()
{
Console.WriteLine("我是T2");
}
public static void T3()
{
Console.WriteLine("我是T3");
}
public static void T4()
{
Console.WriteLine("我是T4");
}
}
}