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