• 委托事件用法


    ExampleSpectrum3D.cs 
    1、用户控件引用了另外的用户控件ViewPointEditor.cs 、RowDataGenerator.cs,在单击start事件发生时,程序运行情况是
    1.   在RowDataGenerator.cs中运行单击事件函数
     
         private void buttonStart_Click(object sender, EventArgs e)
          {
              Start();
          }
         public void Start()
          {
              _peak1X = (double) _rowLength / 8.0;
              _peak2X = (double) _rowLength / 2.0;
              
            timer1.Interval = (int) numericUpDownInterval.Value;
             timer1.Start();
     
              m_bRunning = true;
               
              if (Started != null)
               Started(this, null);
          }
           
    RowDataGenerator.cs中定义事件 开始 结束
    //Start/stop events
    public event EventHandler Started;
    public event EventHandler Stopped;
    控件中公开的事件 Started,可以在另一个调用此控件的窗体中注册一个函数
     public ExampleSpectrum3D()
        {
          InitializeComponent();
          CreateChart();
               
          viewPointEditor1.Chart = _chart;
               
         rowDataGenerator.IntervalMs = 25;
         rowDataGenerator.NewDataGenerated += rowDataGenerator_NewDataGenerated;
         rowDataGenerator.Started += rowDataGenerator1_Started;
         rowDataGenerator.Stopped += rowDataGenerator1_Stopped;   
         }
     
     
     
     
    在控件ExampleSpectrum3D中注册到控件RowDataGenerator.Start事件的函数
        private void rowDataGenerator1_Started(object sender, EventArgs e)
        {
         ///
        }
     
     
        private void rowDataGenerator_NewDataGenerated(ref double[] data)
       {
          //Disable rendering, strongly recommended before updating chart properties
         _chart.BeginUpdate();
         _currentZ += _stepZ;
        if (radioButtonSurface.Checked || radioButtonSurfaceAndArea.Checked)
          {
           SetNewDataToSurface(data);
          }
        if (radioButtonArea.Checked)
          {
           SetNewDataToWaterfall(data);
          }
         if (radioButtonSurfaceAndArea.Checked)
          {
          //Set the data also to front strip
           SetNewDataToFrontWaterfall(data);
          }
          //Allow chart rendering
          _chart.EndUpdate();
            }     
     
     
    总结:
    可以在控件2的按钮事件中配置相关参数、计时器,再使用一个委托事件(不包含事件数据),
    然后在控件1的初始化中把函数注册到控件2的事件中,
    就会达到:在控件2中单击,控件2中完成一系列的操作后,再调用委托事件,执行控件1中的注册到事件上的对应函数
     
    有参数的委托事件 
    public delegate void NewDataGeneratedHandler(ref double[] data);
    public event NewDataGeneratedHandler NewDataGenerated;
     
    定时器tick事件中,调用 public double[] GenerateData()函数
    函数中调用委托 if (NewDataGenerated != null)
               NewDataGenerated(ref aNewData);
    并把新数据传递到委托事件的参数
    由于已经将委托事件注册到相应的函数
    此时控件 ExampleSpectrum3D 中的刷新数据函数就被调用
      private void rowDataGenerator_NewDataGenerated(ref double[] data)
     
     
     
     
     
     
     
     
     
     
     
     
     
     
  • 相关阅读:
    Java学习笔记-Java中的常用类
    Java学习笔记-Java中的常用类
    Java学习笔记-泛型
    GeoIP简介与资源,定位经纬度,获取用户IP
    【插代码】手机号码所在地查询,引用代码
    最后一个对象属性后边不要加豆号的bug,血淋淋的教训啊,模块化开发IE7下的严重错误,养成好习惯
    CSS自定义滚动条样式
    css实现input文本框的双边框美化
    在函数内部定义的变量加与不加var的区别,匿名函数和有名函数内声明变量的区别
    js定时器关闭,js定时器停止,一次关闭所有正在运行的定时器,自定义函数clearIntervals()一次关闭所有正在运行的定时器
  • 原文地址:https://www.cnblogs.com/12xiaole/p/9264775.html
Copyright © 2020-2023  润新知