全网整合营销服务商

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

免费咨询热线: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# 标准事件流实例代码  # 自定义  # 小编  # 东歪西倒  # 在此  # 中有  # 一颗  # 这是一个  # 有许多  # 给大家  # 每隔  # 所述  # 草地上  # 给我留言  # 值为  # 感谢大家  # 源码下载  # 有一个  # 往西  # 画一  # 往东 


相关文章: 香港服务器网站推广:SEO优化与外贸独立站搭建策略  如何用西部建站助手快速创建专业网站?  如何选择长沙网站建站模板?H5响应式与品牌定制哪个更优?  建站之星后台管理系统如何操作?  如何注册花生壳免费域名并搭建个人网站?  如何通过山东自助建站平台快速注册域名?  小说建站VPS选用指南:性能对比、配置优化与建站方案解析  建站之星在线客服如何快速接入解答?  如何确保FTP站点访问权限与数据传输安全?  c++ stringstream用法详解_c++字符串与数字转换利器  深圳 网站制作,深圳招聘网站哪个比较好一点啊?  c# F# 的 MailboxProcessor 和 C# 的 Actor 模型  胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?  企业在线网站设计制作流程,想建设一个属于自己的企业网站,该如何去做?  如何在IIS中新建站点并配置端口与物理路径?  C++ static_cast和dynamic_cast区别_C++静态转换与动态类型安全转换  建站之星如何实现PC+手机+微信网站五合一建站?  盐城做公司网站,江苏电子版退休证办理流程?  上海网站制作开发公司,上海买房比较好的网站有哪些?  php能控制zigbee模块吗_php通过串口与cc2530 zigbee通信【介绍】  行程制作网站有哪些,第三方机票电子行程单怎么开?  如何生成腾讯云建站专用兑换码?  建站主机是什么?如何选择适合的建站主机?  高性能网站服务器部署指南:稳定运行与安全配置优化方案  建站之星如何取消后台验证码生成?  建站之星后台搭建步骤解析:模板选择与产品管理实操指南  建站之星伪静态规则如何设置?  如何通过PHP快速构建高效问答网站功能?  如何挑选优质建站一级代理提升网站排名?  宝塔新建站点报错如何解决?  专业网站建设制作报价,网页设计制作要考什么证?  如何快速登录WAP自助建站平台?  专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?  西安大型网站制作公司,西安招聘网站最好的是哪个?  rsync同步时出现rsync: failed to set times on “xxxx”: Operation not permitted  Bpmn 2.0的XML文件怎么画流程图  SQL查询语句优化的实用方法总结  香港服务器建站指南:外贸独立站搭建与跨境电商配置流程  *服务器网站为何频现安全漏洞?  利用JavaScript实现拖拽改变元素大小  网站设计制作公司地址,网站建设比较好的公司都有哪些?  如何使用Golang安装API文档生成工具_快速生成接口文档  如何在自有机房高效搭建专业网站?  网站制作怎么样才能赚钱,用自己的电脑做服务器架设网站有什么利弊,能赚钱吗?  定制建站平台哪家好?企业官网搭建与快速建站方案推荐  高端网站建设与定制开发一站式解决方案 中企动力  香港服务器租用费用高吗?如何避免常见误区?  建站之星如何优化SEO以实现高效排名?  如何制作算命网站,怎么注册算命网站?  如何在万网自助建站中设置域名及备案? 

您的项目需求

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