原创性申明

此博文的出处 为 http://blog.csdn.net/zhujunxxxxx/article/details/40207663如果进行转载请注明出处。本文作者原创,邮箱zhujunxxxxx@163.com,如有问题请联系作者

最近受朋友所托,需要做一个抽签的程序。我想应该也不难,就是随机嘛,这在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#类似跑马灯抽签小程序相关推荐

  1. C#跑马灯抽签小程序

    原创性申明 此博文的出处 为 http://blog.csdn.net/zhujunxxxxx/article/details/40207663如果进行转载请注明出处.本文作者原创,邮箱zhujunx ...

  2. c语言小程序跑马灯,微信小程序实现跑马灯效果(完整代码)

    在微信小程序 里实现跑马灯效果,类似滚动字幕或者滚动广告之类的,使用简单的CSS样式控制,没用到JS,效果如下图: Wxml代码:一个人活着就是为了让更多的人更好的活着! Wxss代码:/*首页跑马灯 ...

  3. c语言小程序跑马灯,微信小程序实现文字跑马灯效果

    本文实例为大家分享了微信小程序实现文字跑马灯的具体代码,供大家参考,具体内容如下 wxml 1 显示完后再显示 Box"> 2 出现白边后即显示 Box"> {{tex ...

  4. php实现跑马灯闪亮,JavaScript_基于jquery实现的文字向上跑动类似跑马灯的效果,想实现一个类似跑马灯的效果, - phpStudy...

    基于jquery实现的文字向上跑动类似跑马灯的效果 想实现一个类似跑马灯的效果,发现跑马灯有空格.效果也不美观,于是用jquery写了个 页面代码 恭喜187****5204获得1000RBM 恭喜1 ...

  5. ASimpleCache开源缓存框架使用之实现抽签小程序

    使用ASimpleCache开源缓存框架实现抽签小程序 最近在考虑数据缓存的时候发现了这个ASimpleCache,简单到只需要拷贝一个Java文件,正好最近团队有个活动需要抽签,我就做了一个抽签的小 ...

  6. 跑鸭”微信小程序-一款基于校园跑步的社交小程序

    跑鸭:这是我的毕业设计,"跑鸭"微信小程序-一款基于校园跑步的社交小程序(实时里程配速.运动路径.整公里提醒.周榜月榜.打卡分享.热门推荐.线上活动.勋章墙.隐私设置),技术栈:V ...

  7. vue plus.webview 实现 类似微信右上角 关闭小程序

    vue  plus.webview 实现 类似微信右上角 关闭小程序 用过微信的人相信都知道  (左图)  我实现的效果(右图) 大概总结了下, 一共有两种方案, 方案一: 保留  plus.webv ...

  8. 开发一个类似美团的外卖小程序多少钱

    现在通过手机外卖系统点餐已经成为年轻人的生活习惯,大街上随处可见的外卖小哥.而且现在通过外卖系统,不仅可以购买餐饮美食,各种生鲜水果,甜品,饮品超市,便利店等日常生活用品,也可以通过外卖系统购买了.大 ...

  9. 批量跑性格测试小程序

    今天微信群里好多人在发性格测试和动物的关系. 嗯,我就想测试一下这种准不准,测试发现每次答案一样结果都是不一样的. 于是用burpsuite抓微信小程序的数据包,为了跟女神的结果一样,repeater ...

  10. 【python】准点跑路人必备小程序~ 不信你用不到

    前言 嗨喽,大家好呀~这里是爱看美女的茜茜呐 又到了学Python时刻~ 有时候下班~忙着跑路,忘记关电脑,逮到了会被老板扣工资!!怎么办? python带你制做一个小程序,到点自动关机~ 再也不怕忘 ...

最新文章

  1. 局域网IP-MAC绑定方案
  2. jQuery HighchartsTableHTML表格转Highcharts图表插件
  3. 适用于高级Java开发人员的十大书籍
  4. 亚马逊云服务(AWS)中国与毕马威中国建立战略合作伙伴关系
  5. 学习webpack前的准备工作
  6. 网红店主质疑拼多多销售假冒货品 官方:均为正品 再遭恶意污蔑
  7. Android开发笔记(一百一十三)测试工具
  8. BN处理较深的神经网络
  9. 百面机器学习—12.优化算法
  10. linux shadow文件*,Linux /etc/shadow文件详解
  11. IP欺骗攻击原理及如何修改IP
  12. 基础运维 or 低阶运维
  13. 相伴女人一生的爱情语录[组图]
  14. pmp中ram和raci的区别_信息系统项目管理师和PMP考试考哪个?
  15. 成功解决Windows和VM下的Ubuntu虚拟系统之间相互复制粘贴的问题
  16. TCP TIME_WAIT解决方案
  17. 金仓数据库 Oracle至KingbaseES迁移最佳实践(2. 概述)
  18. 根据包名打开其他应用。
  19. 广西北海自愿连锁经营业/1040阳光工程上总之后的真实内幕
  20. GPU并行效率问题——通过MPS提升GPU计算收益

热门文章

  1. IDEA HTML 动态访问本地图片加载失败
  2. rHadoop分布式安装与配置
  3. 浅析百度搜索引擎白皮书
  4. input输入身份证验证
  5. 《算法竞赛入门经典》————竖式问题
  6. 合肥工业大学第六届“互联网+”大学生创新创业大赛项目计划书:AI云学习 —— 一款基于Spark构建知识图谱的人工智能学习工具
  7. 微信安装正确操作方法
  8. 最大流 (Maximum Flow) 之 流网络和流
  9. 小米8SE如何安装google框架-之 chrome 手机安装 没有可安装该应用的设备
  10. 页面修饰框架SiteMesh的简单使用