• 委托和事件(二)


    来来来~

    兄弟们,这次我讲一下委托和事件的用法。

    直接用例子将吧!


    相信很多同学,做winform时,会遇见给form1的griview,添加数据。

    而添加数据的方法,基本是通过 子form2来添加

    这是 form1
    里面有一个 gridview
    还有一个 button



    这里是 form2,

    为了简单,我就默认按一下 button,为form1增加一条数据。



    然后,我们创建一个   实体类,用来作为 gridview的数据源




    接下来,我们先去form2做些事情!

    public partial class Form2 : Form
        {
            //声明一个委托
            public delegate void MyDelegate(User u);
            //声明事件
            public event MyDelegate myTestDelegate;
            public Form2()
            {
                InitializeComponent();
                   
            }
    
            private void Form2_Load(object sender, EventArgs e)
            {
                
            }
    
            //按钮点击事件,添加  User对象并调用委托事件
            private void button1_Click(object sender, EventArgs e)
            {
                User u = new User() { Name="ha",Age=25};
    
                myTestDelegate(u);
                
            }
    
            
        }
    我们可以看见,我在form2增加了一个委托。
    又增加了一个事件,这个事件其实是给form1调用的~~~目的就是为了增加List<User>数据,

    其实没有什么花头啊~得意


    嘿嘿,最后给form1搞点事情做做。

    private void Form1_Load(object sender, EventArgs e)
            {
                
                this.dataGridView1.DataSource = uList;
    
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                //show出 f2窗体
                Form2 f2 = new Form2();
                f2.Show();
                //调用 f2的委托事件
                f2.myTestDelegate += new Form2.MyDelegate(Add);
    
            }
    
    //数据源,可以是datatable,也可以是 List泛型集合。这里我采用  list
            static List<User> uList = new List<User>();
            //委托的方法,添加数据
            public void Add(User u)
            {
                uList.Add(u);//重新绑定datagridview
                BindingSource bs = new BindingSource();
                bs.DataSource = uList;
                this.dataGridView1.DataSource = bs;
            }
    

    这里,我们可以看见,
    load():初始化加载数据,没什么好说的
    Button.Click方法:
    这里我做了下面几件事,
    1 实例化 form2窗体,
    2 show出form2窗体
    3 给form2窗体里的 事件MyDelegate绑定了Add方法。哈哈
    而Add方法的参数(User)来自于我们form2窗体里的User u = new User() { Name="ha",Age=25};这个值




    到这里,大家就可以运行一下程序了

    效果如下:



    总结:

    1   我们先给form2窗体创建了一个委托和事件

    为什么?因为这是给form1调用的事件。哈哈

    2  我们在 form2的button.click事件里,

       创建一个新的user数据,其实就是新增数据的功能。

    并且调用了事件myTestDelegate(u)

    3  我们来到了form1,声明了一个方法叫做 Add(这个才是给form2委托事件传递的方法!Add)

    最后我们在form1的button事件里,show出form2,并且给委托事件赋值了~

    f2.myTestDelegate += new Form2.MyDelegate(Add);

    好了,委托和事件,今天就讲到这里。

    当然上面的功能可以通过很多方法实现,什么构造函数,全局静态变量等等。

    这里只是用委托和事件去解决一下而已。吐舌头吐舌头吐舌头吐舌头吐舌头吐舌头


  • 相关阅读:
    那些你不知道的项目管理细节(四)—需求阶段的意识
    poj 3253 Fence Repair (STL优先队列)
    “大型票务系统”和“实物电商系统”在不能提供商品(服务)时给消费者带来的影响有巨大差异
    is和as在类型转换时的性能差异
    html5 5个重要特性
    xHTML与HTML的写法有什么不同?
    C++设计模式实现--訪问者(Visitor)模式
    开源,我的一些行动
    自写图片遮罩层放大功能jquery插件源代码,photobox.js 1.0版,不兼容IE6
    03004_SQL语句
  • 原文地址:https://www.cnblogs.com/hanjun0612/p/9779911.html
Copyright © 2020-2023  润新知