最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#自定義事件模擬風(fēng)吹草搖擺效果

 更新時間:2017年08月18日 09:51:42   作者:計劃  
這篇文章主要介紹了C#自定義事件模擬風(fēng)吹草搖擺效果,草地上每一顆草都監(jiān)聽HoverTreeWindEvent事件,根據(jù)風(fēng)向(WindDdirection)調(diào)整姿態(tài)。需要的朋友可以參考下

這是一個自定義事件的例子。C#、WinForm、Visual Studio 2017。

在HoverTreeForm中畫一塊草地,上面有許多草(模擬)。

HewenqiTianyi類模擬天氣,會引發(fā)“風(fēng)”事件(HoverTreeWindEvent),風(fēng)有東風(fēng)或西風(fēng),或靜止。

當吹東風(fēng),草往西邊倒,吹西風(fēng)則往東邊到。靜止則草不會東歪西倒。

草地上每一顆草都監(jiān)聽HoverTreeWindEvent事件,根據(jù)風(fēng)向(WindDdirection)調(diào)整姿態(tài)。

HewenqiTianyi中有定時器,每隔一段時間觸發(fā)調(diào)整風(fēng)向的事件。

由于監(jiān)聽到的“風(fēng)”事件不是WinForm中的線程,要改變WinForm中“草”的姿態(tài),

使用了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屬性值為真時,說明有一個創(chuàng)建它以外的線程想訪問它
        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.jb51.net/201707/yuanma/TianYiHeWenQi.rar

總結(jié)

以上所述是小編給大家介紹的C#自定義事件模擬風(fēng)吹草搖擺效果,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關(guān)文章

  • C#通過html調(diào)用WinForm的方法

    C#通過html調(diào)用WinForm的方法

    這篇文章主要介紹了C#通過html調(diào)用WinForm的方法,涉及html頁面中使用JavaScript訪問C#的相關(guān)技巧,需要的朋友可以參考下
    2016-04-04
  • C#在Winform開發(fā)中使用Grid++報表

    C#在Winform開發(fā)中使用Grid++報表

    這篇文章主要介紹了C#在Winform開發(fā)中使用Grid++報表,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • C#后臺接受前臺JSON字符串裝換成字典集合處理

    C#后臺接受前臺JSON字符串裝換成字典集合處理

    本文介紹C#利用Newtonsoft接收前端的JSON字符串,并解析反序列化成字典集合,對其進行處理。
    2016-04-04
  • C# GetMethod方法的應(yīng)用實例講解

    C# GetMethod方法的應(yīng)用實例講解

    GetMethod 是獲取當前 Type 的特定方法,具有多個重載, GetMethod 即使用指定的綁定約束搜索指定方法,本文給大家介紹了C# GetMethod方法的應(yīng)用實例,需要的朋友可以參考下
    2024-04-04
  • c# 實現(xiàn)觀察者模式

    c# 實現(xiàn)觀察者模式

    這篇文章主要介紹了c# 實現(xiàn)觀察者模式的步驟,幫助大家更好的理解和使用c#實現(xiàn)設(shè)計模式,感興趣的朋友可以了解下
    2021-01-01
  • C#/VB.NET?將Word與Excel文檔轉(zhuǎn)化為Text

    C#/VB.NET?將Word與Excel文檔轉(zhuǎn)化為Text

    這篇文章主要介紹了C#/VB.NET?將Word與Excel文檔轉(zhuǎn)化為Text,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的朋友可以參考一下
    2022-08-08
  • C# 類的聲明詳解

    C# 類的聲明詳解

    本文主要對C# 類的聲明進行詳細介紹。具有一定的參考價值,下面跟著小編一起來看下吧
    2017-01-01
  • C# 計算標準偏差相當于Excel中的STDEV函數(shù)實例

    C# 計算標準偏差相當于Excel中的STDEV函數(shù)實例

    下面小編就為大家?guī)硪黄狢# 計算標準偏差相當于Excel中的STDEV函數(shù)實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-01-01
  • C#實現(xiàn)矩陣乘法實例分析

    C#實現(xiàn)矩陣乘法實例分析

    這篇文章主要介紹了C#實現(xiàn)矩陣乘法的方法,實例分析了通過C#數(shù)組構(gòu)造矩陣及實現(xiàn)矩陣乘法的相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-04-04
  • 常用.NET工具(包括.NET可再發(fā)行包2.0)下載

    常用.NET工具(包括.NET可再發(fā)行包2.0)下載

    常用.NET工具(包括.NET可再發(fā)行包2.0)下載...
    2007-03-03

最新評論

鸡泽县| 宁乡县| 体育| 贵溪市| 曲沃县| 日土县| 安达市| 苏尼特右旗| 大庆市| 石渠县| 神池县| 淮安市| 临潭县| 霍林郭勒市| 深水埗区| 安义县| 拉萨市| 孟连| 马鞍山市| 天柱县| 连山| 克什克腾旗| 通化县| 吉木萨尔县| 建德市| 仙居县| 太湖县| 朝阳县| 都江堰市| 山阳县| 定边县| 宜州市| 聊城市| 平潭县| 六枝特区| 成武县| 霞浦县| 湄潭县| 泽普县| 大冶市| 烟台市|