• 自定义Image自动切换图像控件


     做这么一个控件,图片自动切换,形成动画效果。

     随便的码码,码完发现东西太少了,不过还算完善。

     1 public class MyPictureBox : PictureBox 
     2     {
     3 
     4         Timer timer = new Timer ();
     5 
     6         private int curPicIndex = 0;
     7 
     8         private bool run = false;
     9 
    10         public bool Run
    11         {
    12             get { return run; }
    13             set
    14             {
    15                 run = value;
    16                 if (value)
    17                     timer.Start();
    18                 else
    19                     timer.Stop();
    20             }
    21         }
    22 
    23         private List<Image> imgList = new List<Image>();
    24 
    25         private string[] imagepaths = null;
    26 
    27         public string[] ImagePaths
    28         {
    29             get { return imagepaths; }
    30             set
    31             {
    32                 imagepaths = value;
    33 
    34                 if (imagepaths == null || imagepaths.Length == 0)
    35                     return;
    36 
    37                 imgList.Clear();
    38 
    39                 foreach (string v in imagepaths)
    40                 {
    41                     try
    42                     {
    43                         imgList.Add(Image.FromFile(v));
    44                     }
    45                     catch
    46                     { }
    47                 }
    48             }
    49         }
    50 
    51         //private map
    52 
    53         private int autoTimeInterval = 100;
    54 
    55         public int AutoTimeInterval
    56         {
    57             get { return autoTimeInterval; }
    58             set
    59             {
    60                 autoTimeInterval = value;
    61                 if (value > 50 && value < 5000)
    62                     timer.Interval = value;
    63             }
    64         }
    65 
    66         public MyPictureBox()
    67         {
    68             base.SizeMode = PictureBoxSizeMode.StretchImage;
    69 
    70             timer = new Timer();
    71             timer.Interval = autoTimeInterval;
    72             timer.Tick += (s, e) =>
    73             {
    74                 timer.Stop();
    75 
    76                 if (imgList != null && imgList.Count > 0)
    77                 {
    78                     int imgcount = imgList.Count;
    79                     if (imgcount > 0)
    80                     {
    81                         curPicIndex = (curPicIndex + 1) % imgcount;
    82                         base.Image = imgList[curPicIndex];
    83                     }
    84 
    85                     timer.Start();
    86                 }
    87             };
    88         }
    89     }
    MyPictureBox

     

    控件写好了,只有把它放到窗体上才能正常使用。

    在一个form窗体里这样写:

     1  //loadingPic : 加载本地图片
     2         private void button1_Click(object sender, EventArgs e)
     3         {
     4             OpenFileDialog dlg = new OpenFileDialog();
     5             dlg.ValidateNames = true;
     6             dlg.Multiselect = true;
     7             dlg.ShowDialog();
     8             this.myPictureBox1.ImagePaths = dlg.FileNames;
     9         }
    10 
    11         //stop : 图片停止切换
    12         private void button2_Click(object sender, EventArgs e)
    13         {
    14             this.myPictureBox1.Run = false;
    15         }
    16 
    17         //run : 图片开启切换
    18         private void button3_Click(object sender, EventArgs e)
    19         {
    20             this.myPictureBox1.Run = true;
    21         }
    22 
    23         // 设置图片切换的时间间隔
    24         private void trackBar1_ValueChanged(object sender, EventArgs e)
    25         {
    26            this.myPictureBox1 .AutoTimeInterval =   this.trackBar1.Value * 30;
    27         }
    Form窗体内事件

      代码很简单,但是这种模式用的地方很多,比如,自己做一个相册,可以自动切换照片;或者做一个简单的小游戏的时候,控制人物的行为,行走啊,战斗时从出手到战斗结束回归原状态的一系列动作啊等等(其实就是一帧一帧的图片连续播放,和flash一样的);或者是做水流的效果图(两三张就够了,水面的纹理发生改变时,就认为水是动的了),也可以说能想象到的一切简单的动态效果或者行为,都可以用Image控件实现。

    比较简单,就这么多了。

    最牛的工程,也是通过简单的模块堆积出来的,呵呵。

    随手打,未仔细检查,如果有什么疑难杂症,见谅!


      到了我这个年龄,已经进入特殊状态了:工作、女朋友,两手抓,两手都要硬,一个都不能放弃。本想偷空的时候好好码一篇,结果还是没时间,毕竟这么大了,也该找个伴了,有句话不是这么说嘛:时间要用在刀刃上。呵呵,我胡扯。

  • 相关阅读:
    H5页面尺寸兼容rem
    Mysql索引、explain执行计划
    mysql物理结构
    mysql 架构
    excel 写
    好的开源项目
    批量插入大量数据
    文件下载回显
    shardingsphere 实现 springboot集成 多数据源
    前后端代码特殊符号乱码问题
  • 原文地址:https://www.cnblogs.com/preacher/p/4085668.html
Copyright © 2020-2023  润新知