c#类似跑马灯抽签小程序
原创性申明
最近受朋友所托,需要做一个抽签的程序。我想应该也不难,就是随机嘛,这在c#里面也是相当容易的。于是就着手做了前后也就一小时。
我不善于做UI,界面很丑,请勿喷。
先展示一下程序界面
说一下布局,左边就是一个ListView 视图模式是大图标方式,这里注意下 因为要绑定一个imagelist 记得要修改下 imagelist里面图片显示的size,否则会图片很小。
流程是这样的:
添加好预选名单后点击开始,这时候就循环切换 listview的item的ImageIndex(使用两张图片,一张是选中一张未选中的)
这里切换item的图片是单独放在一个线程里面的,线程访问ListView必须使用委托来访问,否则会出错
跑马灯效果的实现,就是刚开始切换的时间长点,接下来时间越来越短,这里用的是Thread的sleep来做的
下面给出代码
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;
using System.IO;
using Brower;namespace Award
{public partial class Form1 : Form{public static string thinkshop = "";public static int NO_IMAGE = 4;public static int YES_IMAGE = 5;public Form1(){InitializeComponent();this.shoplist.View = View.LargeIcon;this.shoplist.LargeImageList = this.imageList1;timer1.Start();readload();load();//加载商家}private delegate void ListViewDelegate(int index);public void ChangeItem(int index){if (this.shoplist.InvokeRequired)//不能访问就创建委托{ListViewDelegate d = new ListViewDelegate(ChangeItem);shoplist.Invoke(d, new object[] { index });}else{ChangeIndex(index);}}//让index的item成为选中状态public void ChangeIndex(int index){//this.shoplist.BeginUpdate();for (int i = 0; i < shoplist.Items.Count; i++)//先把所有的item恢复原样{if (i != index){if (shoplist.Items[i].ImageIndex==YES_IMAGE)shoplist.Items[i].ImageIndex = NO_IMAGE;//设置为未选中样式}elseshoplist.Items[i].ImageIndex = YES_IMAGE;//设置为选中状态}//this.shoplist.EndUpdate(); //结束数据处理,UI界面一次性绘制。 }private void btn_add_Click(object sender, EventArgs e){if (txt_shopname.Text == ""){MessageBox.Show("不能为空!");return;}this.shoplist.BeginUpdate();ListViewItem lvi = new ListViewItem();lvi.ImageIndex = NO_IMAGE;lvi.Text = txt_shopname.Text;this.shoplist.Items.Add(lvi);this.shoplist.EndUpdate(); //结束数据处理,UI界面一次性绘制.txt_shopname.Text = "";l_shopnum.Text = shoplist.Items.Count.ToString(); }private delegate string ListViewItemDelegate(int index);//获取item的项值public string GetItem(int index){if (this.shoplist.InvokeRequired)//不能访问就创建委托{ListViewItemDelegate d = new ListViewItemDelegate(GetItem);return shoplist.Invoke(d, new object[] { index }).ToString();}else{if (shoplist.Items.Count > 0 && index < shoplist.Items.Count)return shoplist.Items[index].Text;else{return "error";}}}public bool flag = true;public void Effect(object result){int time = 900;while (flag){for (int j = 0; j < shoplist.Items.Count; j++){Thread.Sleep(time);if (time > 100)time -= 200;ChangeItem(j);}}for (int j = 0; j < shoplist.Items.Count; j++){Thread.Sleep(time);if (time < 900)time += 100;ChangeItem(j);//在最后一圈时停止圈后停止if (j == int.Parse(result.ToString())){ShowResult(int.Parse(result.ToString()));break;}}}private delegate void ResultDelegate(int index);public void ShowResult(int index){if (this.l_result.InvokeRequired)//不能访问就创建委托{ListViewDelegate d = new ListViewDelegate(ShowResult);l_result.Invoke(d, new object[] { index });}else{string shopname=GetItem(index);l_result.Text = "抽中是:" + shopname;}}public event EventHandler<EventArgs> GetResult;protected void OnGetResult(EventArgs e){if (GetResult != null)GetResult(this, e);}private void button1_Click(object sender, EventArgs e){if (shoplist.SelectedItems.Count > 0){int index=shoplist.SelectedItems[0].Index;shoplist.Items.RemoveAt(index);}}private void btn_start_Click(object sender, EventArgs e){flag = true;int num = -1;if (thinkshop != ""){for (int i = 0; i < shoplist.Items.Count; i++){string tmp = shoplist.Items[i].Text;if (tmp.Equals(thinkshop)){num = i;break;}}}if(num==-1){Random rd = new Random(DateTime.Now.Millisecond);num = rd.Next(shoplist.Items.Count);}new Thread(new ParameterizedThreadStart(Effect)).Start(num);btn_start.Enabled = false;btn_stop.Enabled = true;}private void button2_Click(object sender, EventArgs e){shoplist.Items.Clear();}private void btn_stop_Click(object sender, EventArgs e){btn_start.Enabled = true;btn_stop.Enabled = false;flag = false;}private void timer1_Tick(object sender, EventArgs e){l_time.Text = DateTime.Now.ToLongTimeString();}public void write(string msg){FileStream fs = new FileStream("t.dat", FileMode.Create);StreamWriter sw = new StreamWriter(fs, Encoding.UTF8);sw.Write(msg);sw.Close();fs.Close();}public void readload(){if (File.Exists("t.dat")){FileStream fs = new FileStream("t.dat", FileMode.Open, FileAccess.Read, FileShare.None);StreamReader sr = new StreamReader(fs, Encoding.UTF8);thinkshop = sr.ReadLine();sr.Close();fs.Close();}}//保存商家public void save(){FileStream fs = new FileStream("s.dat", FileMode.Create);StreamWriter sw = new StreamWriter(fs, Encoding.UTF8);for (int i = 0; i < shoplist.Items.Count; i++){sw.WriteLine(shoplist.Items[i].Text);}sw.Close();fs.Close();MessageBox.Show("保存成功!");}//加载商家public void load(){this.shoplist.BeginUpdate();if (File.Exists("s.dat")){FileStream fs = new FileStream("s.dat", FileMode.Open, FileAccess.Read, FileShare.None);StreamReader sr = new StreamReader(fs, Encoding.UTF8);string line = null;while ((line = sr.ReadLine()) != null){//自动加载文件中的商家名ListViewItem lvi = new ListViewItem();lvi.ImageIndex = NO_IMAGE;lvi.Text = line;this.shoplist.Items.Add(lvi);}sr.Close();fs.Close();}this.shoplist.EndUpdate(); //结束数据处理,UI界面一次性绘制.}private void Form1_Activated(object sender, EventArgs e){//注册热键Ctrl+F,Id号为101。HotKey.KeyModifiers.Ctrl也可以直接使用数字2来表示。HotKey.RegisterHotKey(Handle, 100, HotKey.KeyModifiers.Ctrl, Keys.F);HotKey.RegisterHotKey(Handle, 101, HotKey.KeyModifiers.Ctrl, Keys.S);HotKey.RegisterHotKey(Handle, 102, HotKey.KeyModifiers.Alt, Keys.Z);}private void Form1_Leave(object sender, EventArgs e){//注销Id号为100的热键设定 HotKey.UnregisterHotKey(Handle, 100);HotKey.UnregisterHotKey(Handle, 101);HotKey.UnregisterHotKey(Handle, 102);}//重载FromA中的WndProc函数 protected override void WndProc(ref Message m){const int WM_HOTKEY = 0x0312;//按快捷键 switch (m.Msg){case WM_HOTKEY:switch (m.WParam.ToInt32()){case 100:fshow();break;case 101:save();break;case 102:delete();break;}break;}base.WndProc(ref m);}public void delete(){thinkshop = "";if (File.Exists("t.dat"))File.Delete("t.dat");}public void fshow(){Form2 f = new Form2();f.ShowDialog();}}
}
转载于:https://my.oschina.net/zhujunxxxxx/blog/337351
c#类似跑马灯抽签小程序相关推荐
- C#跑马灯抽签小程序
原创性申明 此博文的出处 为 http://blog.csdn.net/zhujunxxxxx/article/details/40207663如果进行转载请注明出处.本文作者原创,邮箱zhujunx ...
- c语言小程序跑马灯,微信小程序实现跑马灯效果(完整代码)
在微信小程序 里实现跑马灯效果,类似滚动字幕或者滚动广告之类的,使用简单的CSS样式控制,没用到JS,效果如下图: Wxml代码:一个人活着就是为了让更多的人更好的活着! Wxss代码:/*首页跑马灯 ...
- c语言小程序跑马灯,微信小程序实现文字跑马灯效果
本文实例为大家分享了微信小程序实现文字跑马灯的具体代码,供大家参考,具体内容如下 wxml 1 显示完后再显示 Box"> 2 出现白边后即显示 Box"> {{tex ...
- php实现跑马灯闪亮,JavaScript_基于jquery实现的文字向上跑动类似跑马灯的效果,想实现一个类似跑马灯的效果, - phpStudy...
基于jquery实现的文字向上跑动类似跑马灯的效果 想实现一个类似跑马灯的效果,发现跑马灯有空格.效果也不美观,于是用jquery写了个 页面代码 恭喜187****5204获得1000RBM 恭喜1 ...
- ASimpleCache开源缓存框架使用之实现抽签小程序
使用ASimpleCache开源缓存框架实现抽签小程序 最近在考虑数据缓存的时候发现了这个ASimpleCache,简单到只需要拷贝一个Java文件,正好最近团队有个活动需要抽签,我就做了一个抽签的小 ...
- 跑鸭”微信小程序-一款基于校园跑步的社交小程序
跑鸭:这是我的毕业设计,"跑鸭"微信小程序-一款基于校园跑步的社交小程序(实时里程配速.运动路径.整公里提醒.周榜月榜.打卡分享.热门推荐.线上活动.勋章墙.隐私设置),技术栈:V ...
- vue plus.webview 实现 类似微信右上角 关闭小程序
vue plus.webview 实现 类似微信右上角 关闭小程序 用过微信的人相信都知道 (左图) 我实现的效果(右图) 大概总结了下, 一共有两种方案, 方案一: 保留 plus.webv ...
- 开发一个类似美团的外卖小程序多少钱
现在通过手机外卖系统点餐已经成为年轻人的生活习惯,大街上随处可见的外卖小哥.而且现在通过外卖系统,不仅可以购买餐饮美食,各种生鲜水果,甜品,饮品超市,便利店等日常生活用品,也可以通过外卖系统购买了.大 ...
- 批量跑性格测试小程序
今天微信群里好多人在发性格测试和动物的关系. 嗯,我就想测试一下这种准不准,测试发现每次答案一样结果都是不一样的. 于是用burpsuite抓微信小程序的数据包,为了跟女神的结果一样,repeater ...
- 【python】准点跑路人必备小程序~ 不信你用不到
前言 嗨喽,大家好呀~这里是爱看美女的茜茜呐 又到了学Python时刻~ 有时候下班~忙着跑路,忘记关电脑,逮到了会被老板扣工资!!怎么办? python带你制做一个小程序,到点自动关机~ 再也不怕忘 ...
最新文章
- 局域网IP-MAC绑定方案
- jQuery HighchartsTableHTML表格转Highcharts图表插件
- 适用于高级Java开发人员的十大书籍
- 亚马逊云服务(AWS)中国与毕马威中国建立战略合作伙伴关系
- 学习webpack前的准备工作
- 网红店主质疑拼多多销售假冒货品 官方:均为正品 再遭恶意污蔑
- Android开发笔记(一百一十三)测试工具
- BN处理较深的神经网络
- 百面机器学习—12.优化算法
- linux shadow文件*,Linux /etc/shadow文件详解
- IP欺骗攻击原理及如何修改IP
- 基础运维 or 低阶运维
- 相伴女人一生的爱情语录[组图]
- pmp中ram和raci的区别_信息系统项目管理师和PMP考试考哪个?
- 成功解决Windows和VM下的Ubuntu虚拟系统之间相互复制粘贴的问题
- TCP TIME_WAIT解决方案
- 金仓数据库 Oracle至KingbaseES迁移最佳实践(2. 概述)
- 根据包名打开其他应用。
- 广西北海自愿连锁经营业/1040阳光工程上总之后的真实内幕
- GPU并行效率问题——通过MPS提升GPU计算收益