这是一个自定义事件的例子。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小时内与您取得联系。