使用委托和事件在窗体间传递数据

本文是对上一篇随笔的补充。
代码模拟一个邮件客户端的未读已读的功能
Form1的代码:
using System.Windows.Forms;
namespace DelegateAndEvent
{
    public partial class Form1 : Form
    {
        public int index;
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            listBox1.Items.AddRange(new object[] { "未读邮件", "未读邮件", "未读邮件", "未读邮件", "未读邮件"});
        }

        private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            if(listBox1.SelectedItem!=null)
            {
                string text = listBox1.SelectedItem.ToString();
                 index = listBox1.SelectedIndex;
                var form2 = new Form2(text);
                form2.MyEvent +=Operate;
                form2.Show();
            }
        }

        private void Operate()
        {
            listBox1.Items.RemoveAt(index);
            listBox1.Items.Insert(index,"已读邮件");
        }
    }
}
Form2的代码:
using System;
using System.Windows.Forms;
namespace DelegateAndEvent
{
    public partial class Form2 : Form
    {
        public delegate void MyDel();

        public event MyDel MyEvent;

        public Form2()
        {
            InitializeComponent();
        }

        public Form2(string text)
        {
            InitializeComponent();
            this.textBox1.Text = text;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            MyEvent();
            this.Dispose();
        }
    }
}
posted @ 2009-08-18 14:06  wispzone  阅读(190)  评论(0)    收藏  举报