自定义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控件实现。

比较简单,就这么多了。

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

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



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

时间: 2024-10-20 18:53:02

自定义Image自动切换图像控件的相关文章

OpenLayers 3 之 扩展自定义控件--以切换图层控件为例

openlayers 中的控件,是一个固定在页面某个位置的可见的DOM元素,它们可能包含可操作的按钮,也可能只是单纯的展示信息,它们的位置及其样式是由与其关联的CSS样式决定的.默认情况下,它们都位于一个CSS 类(class)为ol.overlaycontainer-stopevent的元素内,当然也可以使用其他的自定义的DOM容器元素. 在openlayers 的结构中,控件有很多,比如左上角的缩放控件.右下角的属性控件,这些控件都是继承一个基类 ol.control.Control,基类主

Android 自定义View之自绘控件

首先要提前声明一下,我对于自定义View的理解并不是很深,最近啃了几天guolin博主写的关于自定义View的博客,讲的非常棒,只不过涉及到源码和底层的一些东西,我自己就懵逼了,目前只是会了关于自定义View的简单使用,不过还是要写出来,当做练习了,哈哈~对于一些没有接触过的初学者,希望会有所帮助,共同成长: 按类型,自定义View可以分为三种:自绘控件.组合控件.继承控件,对于这三种类型,我会写三篇博客来分别介绍和使用. 自定义View中有三个非常重要的方法,分别为: onMeasure():

[Swift通天遁地]九、拔剑吧-(3)创建多种自定义Segment分段样式的控件

本文将演示创建多种自定义Segment分段样式的控件. 首先确保已经安装了所需的第三方类库.双击查看安装配置文件[Podfile] 1 platform :ios, '12.0' 2 use_frameworks! 3 4 target 'DemoApp' do 5 source 'https://github.com/CocoaPods/Specs.git' 6 pod 'PagingMenuController' 7 end 根据配置文件中的相关设置,安装第三方类库. 安装完成之后,双击打开

自定义日历(四)-区间选择控件

目录 一.概述 二.效果展示 三.整体结构 四.分析实现 1.QPickDate 2.QDatePanel 3.QDateWidget.QDateContent 4. 调度绘制 五.相关文章 原文链接:自定义日历(四)-区间选择控件 一.概述 很早很早以前,写过几篇关于日历的文章,不同于Qt原生的控件,这些控件都是博主使用自绘的方式进行完成,因此可定制性更强一些,感兴趣的可以参考自定义日历(一).自定义日历(二)和自定义日历(三)). 本篇文章还是继续来写我们的日历控件,仍然采用自绘的方式,带来

OpenCV在MFC图像控件内显示图像

1.依照文章<OpenCV+MFC显示图像>,完毕配置. 2.创建对应的图像控件,button控件. 3.进行类型转换. 在当前OpenCV2版本号内,图像格式为cv::Mat ,而该格式无法直接在MFC内显示.因此,须要将其转换为能够在MFC内显示的CvvImage类格式,该类内有函数 DrawToHDC()支持MFC.试了一下无法直接实现,须要曲线救国.首先,将 格式cv::Mat变换为格式IplImage,再转换格式为 CvvImage. 还有问题,眼下openCV2版本号不再支持Cvv

pb自动注册ole控件

方法一:  1.手工注册OCX控件 将该控件随程序一起发布,然后,将此文件拷到windows\system,或者直接放在本运行目录,然后执行dos命令,run( "regsvr32   *.ocx ") *表示具体的文件.然后写注册表,将控件注册标志置为1,在程序开始运行时,先检查该标志,是否需要进行注册 2.自动注册OCX控件 在OCX控件中一般都包含一个DLLRegisterServer函数,可以用此函数来实现OCX控件自动注册. 例如:我们要在应用中自动注册ActiveMovie

【IOS界面布局】横竖屏切换和控件自适应(推荐)

[IOS界面布局]横竖屏切换和控件自适应(推荐) 分类: [MAC/IOS下开发]2013-11-06 15:14 8798人阅读 评论(0) 收藏 举报 横竖屏切换 自适应 第一种:通过人为的办法改变view.transform的属性. 具体办法: view.transform一般是View的旋转,拉伸移动等属性,类似view.layer.transform,区别在于 View.transform是二维的,也就是使用仿射的办法通常就是带有前缀CGAffineTransform的类(可以到API

在cocos2d-js实现自动绑定cocostudioUI控件与事件(二)

前两天有个刚学习使用cocos2d-js的同事问我,怎么实现一个功能:点击一个按钮UI显示计数加1,按住不放UI计数就不停的加. 这个功能不就是个长按事件吗?我给他描述了下实现长按事件的思路: 1. 在控件touchBegan时,使用 一次性定时器scheduleOnce传入touchLong函数,设定1秒后执行. 2.  touchLong触发时,开启schedule传入addOnce函数(ui显示计数加1),设定每0.1秒执行一次. 3.  在touchEnded时执行unschedule函

在cocos2d-js实现自动绑定cocostudioUI控件与事件

一.起因 在客户端游戏开发中最让人恶心的工作就是UI相关的东西,虽然有了像cocostudio这样的可视化工具,但界面中有大量需要由代码访问的控件的时候,需要写太多重复的代码例如: //加载UI配置文件 var root = ccs.uiReader.widgetFromJsonFile("res/cocosui/UIEditorTest/UIButton_Editor/UIButton_Editor_1.json"); this._mainNode.addChild(root); /