全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

C#自定义事件模拟风吹草摇摆效果

这是一个自定义事件的例子。C#、WinForm、Visual Studio 2017。

在HoverTreeForm中画一块草地,上面有许多草(模拟)。

HewenqiTianyi类模拟天气,会引发“风”事件(HoverTreeWindEvent),风有东风或西风,或静止。

当吹东风,草往西边倒,吹西风则往东边到。静止则草不会东歪西倒。

草地上每一颗草都监听HoverTreeWindEvent事件,根据风向(WindDdirection)调整姿态。

HewenqiTianyi中有定时器,每隔一段时间触发调整风向的事件。

由于监听到的“风”事件不是WinForm中的线程,要改变WinForm中“草”的姿态,

使用了BeginInvoke方法和委托,在WinForm线程外访问控件。具体看HoverTreeGrass用户控件。

效果图:

HewenqiTianyi类代码:

using System;
using System.Timers;
namespace TianYiHeWenQi
{
  class HewenqiTianyi
  {
    public static event ActionEventHandler HoverTreeWindEvent;
    WindEventArgs _arg = new WindEventArgs();
    public HewenqiTianyi()
    {
      Timer h_timer = new Timer();
      h_timer.Interval = 3000;
      h_timer.Elapsed += H_timer_Elapsed;
      h_timer.Start();
    }
    Random _HoverClock=new Random ();
    private void H_timer_Elapsed(object sender, ElapsedEventArgs e)
    {
      _arg.WindType = (WindDdirection)(_HoverClock.Next(3));
      OnAction(_arg);
    }
    protected void OnAction(WindEventArgs ev)
    {
      HoverTreeWindEvent?.Invoke(ev);
      //相当于以下代码
      //if (HoverTreeWindEvent != null)
      //{
      //  HoverTreeWindEvent(ev);
      //}
    }
  }
  class WindEventArgs : EventArgs
  {
    public WindDdirection WindType { get; set; }
  }
  enum WindDdirection
  {
    East,
    West,
    Static
  }
  delegate void ActionEventHandler(WindEventArgs ev);
}

自定义用户控件代码:

using System;
using System.Windows.Forms;
namespace TianYiHeWenQi
{
  public partial class HoverTreeGrass : UserControl
  {
    delegate void MySetText(string text);
    public HoverTreeGrass()
    {
      InitializeComponent();
      HewenqiTianyi.HoverTreeWindEvent += HewenqiTianyi_HoverTreeWindEvent;
    }
    private void UpdateLabel(WindDdirection wd)
    {
      if (label_grass.InvokeRequired)
      {
        // 当一个控件的InvokeRequired属性值为真时,说明有一个创建它以外的线程想访问它
        Action<WindDdirection> actionDelegate = (x) => {
          switch (x)
          {
            case WindDdirection.East:
              label_grass.Location = new System.Drawing.Point(40 - 9, label_grass.Location.Y);
              label_grass.Text="\\";
              break;
            case WindDdirection.West:
              label_grass.Location = new System.Drawing.Point(40+9, label_grass.Location.Y);
              label_grass.Text = "/";
              break;
            case WindDdirection.Static:
              label_grass.Location = new System.Drawing.Point(40, label_grass.Location.Y);
              label_grass.Text = "|";
              break;
          }
        };
        // 或者
        // Action<string> actionDelegate = delegate(string txt) { this.label_grass.Text = txt; };
        this.label_grass.BeginInvoke(actionDelegate, wd);
      }
      else
      {
        switch (wd)
        {
          case WindDdirection.East:
            label_grass.Text = "\\";
            break;
          case WindDdirection.West:
            label_grass.Text = "/";
            break;
          case WindDdirection.Static:
            label_grass.Text = "|";
            break;
        }
      }
    }
    private void HewenqiTianyi_HoverTreeWindEvent(WindEventArgs ev)
    {
      UpdateLabel(ev.WindType);
    }
  }
}

HoverTreeForm窗体代码:

using System.Windows.Forms;
namespace TianYiHeWenQi
{
  public partial class HoverTreeForm : Form
  {
    public HoverTreeForm()
    {
      InitializeComponent();
      for (int i = 0; i < tableLayoutPanel_hovertree.ColumnCount; i++) {
        for (int j = 0; j < tableLayoutPanel_hovertree.RowCount; j++) {
          tableLayoutPanel_hovertree.Controls.Add(new HoverTreeGrass(), i, j);
        }
      }
      HewenqiTianyi h_ty = new HewenqiTianyi();
    }
  }
}

源码下载:http://xiazai./201707/yuanma/TianYiHeWenQi.rar

总结

以上所述是小编给大家介绍的C#自定义事件模拟风吹草摇摆效果,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!


# c#  # 自定义事件  # C#事件管理器如何清空所有监听详解  # 详解C#之事件  # C#创建自定义控件及添加自定义属性和事件使用实例详解  # C#Button窗体常用属性及事件详解  # 一篇文章彻底搞清楚c#中的委托与事件  # c#在程序中定义和使用自定义事件方法总结  # C#事件(event)使用方法详解  # C#事件实例详解  # C# 标准事件流实例代码  # 自定义  # 小编  # 东歪西倒  # 在此  # 中有  # 一颗  # 这是一个  # 有许多  # 给大家  # 每隔  # 所述  # 草地上  # 给我留言  # 值为  # 感谢大家  # 源码下载  # 有一个  # 往西  # 画一  # 往东 


相关文章: 网站制作多少钱一个,建一个论坛网站大约需要多少钱?  免费制作海报的网站,哪位做平面的朋友告诉我用什么软件做海报比较好?ps还是cd还是ai这几个软件我都会些我是做网页的?  新网站制作渠道有哪些,跪求一个无线渠道比较强的小说网站,我要发表小说?  ,交易猫的商品怎么发布到网站上去?  专业公司网站制作公司,用什么语言做企业网站比较好?  小捣蛋自助建站系统:数据分析与安全设置双核驱动网站优化  香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧  如何获取免费开源的自助建站系统源码?  制作网站的软件免费下载,免费制作app哪个平台好?  网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?  盘锦网站制作公司,盘锦大洼有多少5G网站?  如何快速上传建站程序避免常见错误?  如何通过多用户协作模板快速搭建高效企业网站?  Android自定义listview布局实现上拉加载下拉刷新功能  简历在线制作网站免费版,如何创建个人简历?  图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?  深圳 网站制作,深圳招聘网站哪个比较好一点啊?  建站之星安装步骤有哪些常见问题?  如何零基础在云服务器搭建WordPress站点?  常州自助建站费用包含哪些项目?  香港服务器网站生成指南:免费资源整合与高速稳定配置方案  如何在阿里云服务器自主搭建网站?  如何在Golang中实现微服务服务拆分_Golang微服务拆分与接口管理方法  如何在云主机上快速搭建多站点网站?  个人摄影网站制作流程,摄影爱好者都去什么网站?  c# Task.Yield 的作用是什么 它和Task.Delay(1)有区别吗  如何在阿里云购买域名并搭建网站?  学校免费自助建站系统:智能生成+拖拽设计+多端适配  如何制作算命网站,怎么注册算命网站?  建站之星北京办公室:智能建站系统与小程序生成方案解析  广州美橙建站如何快速搭建多端合一网站?  c# 在ASP.NET Core中管理和取消后台任务  广德云建站网站建设方案与建站流程优化指南  北京的网站制作公司有哪些,哪个视频网站最好?  ppt在线制作免费网站推荐,有什么下载免费的ppt模板网站?  制作假网页,招聘网的薪资待遇,会有靠谱的吗?一面试又各种折扣?  公司网站设计制作厂家,怎么创建自己的一个网站?  山东云建站价格为何差异显著?  设计网站制作公司有哪些,制作网页教程?  如何在阿里云香港服务器快速搭建网站?  高端云建站费用究竟需要多少预算?  表情包在线制作网站免费,表情包怎么弄?  建站主机是什么?如何选择适合的建站主机?  如何在IIS中新建站点并配置端口与物理路径?  如何在腾讯云服务器上快速搭建个人网站?  代购小票制作网站有哪些,购物小票的简要说明?  建站之星安装路径如何正确选择及配置?  网站建设制作、微信公众号,公明人民医院怎么在网上预约?  如何快速建站并高效导出源代码?  建站之星如何防范黑客攻击与数据泄露? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。