闲着蛋疼,写个抽奖器玩玩。
界面:2个按钮(一个开始,一个停止),一个label显示当前抽中人的姓名或者编号,一个定时器。
原理:在窗体加载的时候,首先加载好在配置文件设置的文件夹内的所有图片保存在一个List中,并且设置好timer的时间,最好是短一点,10-20毫秒之内。在timer的Tick事件中,随机指定一个路径。
详细代码:界面的布局就 省了。
配置文件
<configuration> <appSettings > <add key="picPath" value="F:\Sample\winform\clock"/> </appSettings> </configuration>
Load事件
timer1.Enabled = false;//默认不启用定时器 timer1.Interval = 15;//定时器触发间隔时间,毫秒为单位 string path = ConfigurationManager.AppSettings["picPath"].ToString();//获取配置文件的图片路径,可以考虑用OpenFileDialg.... string[] fs = Directory.GetFiles(path);//获取该路径下的所有文件名 //遍历所有文件,匹配是图片的文件 for (int i = 0; i < fs.Length; i++) { if (Path.GetExtension(fs[i]).ToLower() == ".jpg")//该处为默认扩展名,根据具体情况而定 { photo.Add(fs[i]);//如果是图片文件,则将该文件路径添加到全局的ArrayList中 } }
开始按钮和停止按钮事件
//开始按钮事件 private void button1_Click(object sender, EventArgs e) { timer1.Enabled = true;//启用定时器 } //停止按钮事件 private void button2_Click(object sender, EventArgs e) { timer1.Enabled = false;//停用定时器 }
最后一个是重点的定时器Tick事件
private void timer1_Tick(object sender, EventArgs e) { //产生一个随机数,随机数的范围为0-文件总数 Random rand = new Random(); int i= rand.Next(photo.Count); pictureBox1.ImageLocation = photo[i].ToString();//指定PicBox的文件路径为随机的路径 //以下代码为截取文件名,不包括后缀,实际应用中,可能是姓名等其他唯一的命名。 string filename = Path.GetFileName(photo[i].ToString());// int index = filename.LastIndexOf('.'); label1.Text = filename.Substring(0, index); }
最后来个界面截图瞧瞧
本文从百度空间搬家到博客园。。