C#自定义事件模拟风吹草摇摆效果的示例分析
发表于:2022-08-12 作者:安全数据网编辑
编辑最后更新 2022年08月12日,这篇文章给大家分享的是有关C#自定义事件模拟风吹草摇摆效果的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。这是一个自定义事件的例子。C#、WinForm、Visua
这篇文章给大家分享的是有关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属性值为真时,说明有一个创建它以外的线程想访问它 ActionactionDelegate = (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 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(); } }}
感谢各位的阅读!关于"C#自定义事件模拟风吹草摇摆效果的示例分析"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!
c语言网络技术和编程语言总结
c语言对应的三级考试网络技术
网站服务器后台如何加防护密码
c语言软件开发步骤
c语言中网络技术知识点
服务器对权限提升的防护措施
怎么在阿里云租服务器
黑苹果能做web服务器吗
c语言和网络技术哪个好考
云服务器2核4G是什么性能
软件开发参股合作协议
数据库中代理码
aap商城软件开发计划书
sql数据库员工信息表设计
互联网科技年会标语
广州软件开发费用是多少
网络安全岗是矫正视力
数据库搜索某一列
天津公安系统招聘网络安全工程师
搭建服务器需要内网穿透吗
服务器配置后无法运行
湖北java程序软件开发培训
聊天软件开发要做什么准备
网络安全模式怎么连接网络
视频语音交友软件开发
mysql数据库互联网
影视资源用什么服务器
青浦区网络安全审计系统咨询品牌
地方银行软件开发薪酬待遇
公司服务器安装那些公用软件
云服务器win10下载教程
手机网络安全问题发言300字
东南大学网络安全学院公章
网络安全法责任主体
数据库搜索某一列
西宁警示教育基地软件开发
数据库学下载
网络安全专题教育培训简报
体验服和平精英服务器更新
国家计算机三级网络技术难吗