c#类似跑马灯抽签小程序
生活随笔
收集整理的這篇文章主要介紹了
c#类似跑马灯抽签小程序
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
原創性申明
此博文的出處 為?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#类似跑马灯抽签小程序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 51单片机——中断
- 下一篇: C#窗体鼠标事件区分单击双击