年會抽獎軟件:
Q.Q 358189777
C#、 數據庫Access;
1、系統啟動,自動全屏展示。
2、背景隨心切換、
3、快捷鍵方便自如:
F1:彈出設置界面
F2:查詢人員名單、中獎名單
F3:基礎人員信息導入
F4:查看當前抽獎項目已經抽取的名單
F5:刷新
F12:退出系統
ESC:主界面自動最小化;其他設置界面自動關閉
Delete:數據重置
有需要源碼,在我的淘寶店下單 https://item.taobao.com/item.htm?id=542768246339 ;
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Data.OleDb; using System.Drawing; using System.Linq; using System.Runtime.InteropServices; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using CJ.Ctrl; namespace CJ { public partial class MainFrom : Form { public MainFrom() { InitializeComponent(); } /// <summary> /// 人員抽獎組塊 /// </summary> public static List<UCNum> LstUcnum = new List<UCNum> (); public int YgNoLength = 6;//長度,參與人員的代號長度 public int SX = 0; public int SY1 = 0;//抽獎項目框的Y周初始位置 public int SY2 = 0;//抽獎項目框的Y軸結束位置 public TextBox tbOtherCJNum = new TextBox();//其他抽獎項目,記錄人數。 public TextBox tbOtherCJNumName = new TextBox(); //其他抽獎項目,抽獎項目名稱。 public GroupBox GBQT = new GroupBox(); public Image imgStr;//設置抽獎按鈕背景圖片,開始按鈕 public Image imgEnd;//設置抽獎按鈕背景圖片,結束按鈕 public int MaxNum = 0;//最大抽獎人數 public int SYNumn = 0; public bool IsTrue = true; public static List<YG> LstYg = new List<YG>(); public RadioButton RdioOrther = new RadioButton(); public Label LbDispyCJ = new Label(); public Button BtntherCJ = new Button(); //用全局變量中轉 Point mouseLocation; //--------------------------------------------------------------------- public Prize prize = new Prize(); public void SetBackgroundImage(string Imagestr,string Mrk) { if (Mrk == "主頁") { this.BackgroundImage = Image.FromFile(Imagestr); } else if (Mrk == "開始") { lbbtn.Image = Image.FromFile(Imagestr); imgStr = Image.FromFile(Imagestr); } else { imgEnd = Image.FromFile(Imagestr); } } #region =========================================全屏設置================================================ [DllImport("user32.dll", EntryPoint = "ShowWindow")] public static extern Int32 ShowWindow(Int32 hwnd, Int32 nCmdShow); public const Int32 SW_SHOW = 5; public const Int32 SW_HIDE = 0; [DllImport("user32.dll", EntryPoint = "SystemParametersInfo")] private static extern Int32 SystemParametersInfo(Int32 uAction, Int32 uParam, ref Rectangle lpvParam, Int32 fuWinIni); public const Int32 SPIF_UPDATEINIFILE = 0x1; public const Int32 SPI_SETWORKAREA = 47; public const Int32 SPI_GETWORKAREA = 48; [DllImport("user32.dll", EntryPoint = "FindWindow")] private static extern Int32 FindWindow(string lpClassName, string lpWindowName); /// <summary> /// 設置全屏或這取消全屏 /// </summary> /// <param name="fullscreen">true:全屏 false:恢復</param> /// <param name="rectOld">設置的時候,此參數返回原始尺寸,恢復時用此參數設置恢復</param> /// <returns>設置結果</returns> public Boolean SetFormFullScreen(Boolean fullscreen)//, ref Rectangle rectOld { Rectangle rectOld = Rectangle.Empty; Int32 hwnd = 0; hwnd = FindWindow("Shell_TrayWnd", null);//獲取任務欄的句柄 if (hwnd == 0) return false; if (fullscreen)//全屏 { ShowWindow(hwnd, SW_HIDE);//隱藏任務欄 SystemParametersInfo(SPI_GETWORKAREA, 0, ref rectOld, SPIF_UPDATEINIFILE);//get 屏幕范圍 Rectangle rectFull = Screen.PrimaryScreen.Bounds;//全屏范圍 SystemParametersInfo(SPI_SETWORKAREA, 0, ref rectFull, SPIF_UPDATEINIFILE);//窗體全屏幕顯示 } else//還原 { ShowWindow(hwnd, SW_SHOW);//顯示任務欄 SystemParametersInfo(SPI_SETWORKAREA, 0, ref rectOld, SPIF_UPDATEINIFILE);//窗體還原 } return true; } #endregion =========================================全屏設置================================================ private void MainFrom_Load(object sender, EventArgs e) { tbOtherCJNum.TextChanged+=tbOtherCJNum_TextChanged; //其他抽獎項目,記錄人數。 tbOtherCJNumName.TextChanged+=tbOtherCJNumName_TextChanged; //其他抽獎項目,抽獎項目名稱。 BtntherCJ.Click += BtntherCJ_Click; tbOtherCJNum.KeyPress += tbOtherCJNum_KeyPress; //A.[員工代號],A.[員工名稱],A.[部門代號],B.[部門名稱],A.[抽獎狀態],a.[中獎限制],A.[中獎號],A.[中獎名稱] #region ==================================加載所有員工====================================== DataTable DtAllYg = ReYg(); for (int i = 0; i < DtAllYg.Rows.Count; i++) { YG y = new YG(); YG xzy = new YG(); y.YG_NO = DtAllYg.Rows[i]["員工代號"].ToString(); y.YG_Name = DtAllYg.Rows[i]["員工名稱"].ToString(); LstYg.Add(y); } #endregion ==================================加載所有員工====================================== BackgroundImageLoad();//背景圖片加載 #region =====================================全屏設置============================================ SetFormFullScreen(true); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; this.WindowState = System.Windows.Forms.FormWindowState.Maximized; #endregion=====================================全屏設置============================================ PrizeLoad();//抽獎項目加載 GetNoLength();//獲取人員工號長度 lbbtn.Tag = "開始"; } void tbOtherCJNum_KeyPress(object sender, KeyPressEventArgs e) { if (e.KeyChar != '\b')//這是允許輸入退格鍵 { if ((e.KeyChar < '0') || (e.KeyChar > '9'))//這是允許輸入0-9數字 { e.Handled = true; } } } /// <summary> /// 獲取所有參與抽獎的人員信息。 /// </summary> /// <returns></returns> public DataTable ReYg() { DataTable dt = new DataTable(); try { string sql = "SELECT A.[員工代號],A.[員工名稱],A.[部門代號],B.[部門名稱],A.[抽獎狀態],a.[中獎限制],A.[中獎號],A.[中獎名稱] FROM 人員表 as A left join 部門表 as B on A.[部門代號] = B.[部門代號] ;"; dt = AccessHelper.DataSet(sql).Tables[0]; } catch (Exception ex) { } return dt; } void tbOtherCJNumName_TextChanged(object sender, EventArgs e) { lb項目號.Text = tbOtherCJNumName.Text; lbPrizeTile.Text = tbOtherCJNumName.Text; } void tbOtherCJNum_TextChanged(object sender, EventArgs e) { lb總人數.Text = tbOtherCJNum.Text; } /// <summary> /// 獲取人員工號長度 /// </summary> public void GetNoLength() { //MaxNum string sql = "SELECT Num,NumType FROM MaxNum"; DataTable dt = AccessHelper.DataSet(sql).Tables[0]; for (int i = 0; i < dt.Rows.Count; i++) { if (dt.Rows[i]["NumType"].ToString() == "W") { YgNoLength =Convert.ToInt32(dt.Rows[i]["Num"].ToString()); } if (dt.Rows[i]["NumType"].ToString() == "N") { MaxNum =Convert.ToInt32( dt.Rows[i]["Num"].ToString()); } } } /// <summary> /// 背景圖片加載 /// </summary> public void BackgroundImageLoad() { try { string sql0 = "SELECT A.[Path],a.[IType] FROM BackImage AS A"; DataTable DtBakImage = AccessHelper.DataSet(sql0).Tables[0]; for (int i = 0; i < DtBakImage.Rows.Count; i++) { if (DtBakImage.Rows[i]["IType"].ToString() == "Main") { this.BackgroundImage = Image.FromFile(DtBakImage.Rows[i]["Path"].ToString()); ; } else if (DtBakImage.Rows[i]["IType"].ToString() == "BtnStr") { imgStr = Image.FromFile(DtBakImage.Rows[i]["Path"].ToString()); lbbtn.Image = Image.FromFile(DtBakImage.Rows[i]["Path"].ToString()); ; } else if (DtBakImage.Rows[i]["IType"].ToString() == "BtnEnd") { imgEnd = Image.FromFile(DtBakImage.Rows[i]["Path"].ToString()); } else if (DtBakImage.Rows[i]["IType"].ToString() == "Title") { LbGSMC.Text = DtBakImage.Rows[i]["Path"].ToString(); } else { lb標語.Text = DtBakImage.Rows[i]["Path"].ToString(); } } } catch (Exception) { } } /// <summary> /// 抽獎項目加載 /// </summary> public void PrizeLoad() { try { PMeiun.Controls.Clear(); int W = this.Width;//當前寬度 int H = this.Height;//當前高度 int PX = Convert.ToInt32(Math.Floor((H - 400) * 1.0 / 2)); PMeiun.Location = new System.Drawing.Point(0, PX); //位置 SY1 = PX;//獲取並設置抽獎項目Y坐標初始位置 SY2 = PX + 400;//獲取抽獎項目Y坐標做大范圍的坐標 } catch (Exception ex) { } try { string sql = "SELECT a.[排序],a.[項目號],a.[獎項名稱],a.[中獎人數],a.[限制因素],a.[已經抽取],a.[批次數] FROM 抽獎規則 AS a ORDER BY a.排序 ASC "; DataTable DtCJ = AccessHelper.DataSet(sql).Tables[0]; int RH = 0; int RW = 0; if (DtCJ.Rows.Count > 0) { RH = 28;// Convert.ToInt32(Math.Floor(400 * 1.0 / (DtCJ.Rows.Count + 2))); RW = 178; for (int i = 0; i < DtCJ.Rows.Count; i++) { RadioButton rad = new RadioButton(); rad.Location = new System.Drawing.Point(8, 5 + RH * i); rad.Size = new System.Drawing.Size(RW, RH - 2); rad.TabIndex = 0; rad.TabStop = true; rad.Text = DtCJ.Rows[i]["中獎人數"] + "人:" + DtCJ.Rows[i]["獎項名稱"].ToString(); rad.UseVisualStyleBackColor = true; rad.CheckedChanged += rad_CheckedChanged; rad.Tag = DtCJ.Rows[i]["項目號"].ToString(); this.PMeiun.Controls.Add(rad); } RdioOrther.Location = new System.Drawing.Point(8, 5 + RH * DtCJ.Rows.Count); RdioOrther.Size = new System.Drawing.Size(RW, RH - 1); RdioOrther.TabIndex = 0; RdioOrther.TabStop = true; RdioOrther.Text = "臨時加抽"; RdioOrther.UseVisualStyleBackColor = true; RdioOrther.CheckedChanged += RdioOrther_CheckedChanged; this.PMeiun.Controls.Add(RdioOrther); //------------------------------------------------------------------------------- GroupBox gb = new GroupBox(); gb.BackColor = System.Drawing.Color.Transparent; gb.Location = new System.Drawing.Point(4, RH * (DtCJ.Rows.Count + 1) - 4); gb.Name = "gB"; gb.Size = new System.Drawing.Size(170, 130); gb.TabIndex = 7; gb.TabStop = false; gb.Visible = false; GBQT = gb; this.PMeiun.Controls.Add(GBQT); //-------------------------------------------------------------------------------- Label lbotherCJ = new Label(); lbotherCJ.Text = "抽獎人數"; lbotherCJ.AutoSize = true; lbotherCJ.Location = new System.Drawing.Point(10, 40); lbotherCJ.Size = new System.Drawing.Size(32, 12); this.GBQT.Controls.Add(lbotherCJ); tbOtherCJNum.Location = new System.Drawing.Point(62, 35); tbOtherCJNum.Size = new System.Drawing.Size(100, 21); this.GBQT.Controls.Add(tbOtherCJNum); //-------------------------------------------------- Label lbotherName = new Label(); lbotherName.Text = "獎項名稱"; lbotherName.AutoSize = true; lbotherName.Location = new System.Drawing.Point(10, 70); lbotherName.Size = new System.Drawing.Size(32, 12); this.GBQT.Controls.Add(lbotherName); tbOtherCJNumName.Location = new System.Drawing.Point(62, 65); tbOtherCJNumName.Size = new System.Drawing.Size(100, 21); tbOtherCJNumName.Text = "加抽獎" + DateTime.Now.ToString("fffff") ; this.GBQT.Controls.Add(tbOtherCJNumName); // BtntherCJ.Text = "保 存"; BtntherCJ.Location = new System.Drawing.Point(62, 95); BtntherCJ.Size = new System.Drawing.Size(70, 21); this.GBQT.Controls.Add(BtntherCJ); } } catch (Exception ex) { string xxxx = ex.Message.ToString(); } } /// <summary> /// 臨時加抽獎,保存按鈕 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> void BtntherCJ_Click(object sender, EventArgs e) { try { if (Convert.ToInt32(tbOtherCJNum.Text.Trim())==0) { return; } string sql = ""; prize.IsidNum = 1; prize.Name = this.tbOtherCJNumName.Text.Trim(); prize.Num = Convert.ToInt32(tbOtherCJNum.Text.Trim()); prize.YJNum = 0; prize.YJIsidNum = 0; prize.ThisNum = prize.Num; prize.ReMark = ""; sql = "Select count(1) From [抽獎規則] as A Where A.[獎項名稱] = '" + prize.Name + "' "; int count = Convert.ToInt32(AccessHelper.DataSet(sql).Tables[0].Rows[0][0]); if (count < 1) { prize.Item = DateTime.Now.ToString("HHmmssffffff"); sql = "Select Max(A.[排序])+1 From [抽獎規則] as A "; prize.ID = Convert.ToInt32(AccessHelper.DataSet(sql).Tables[0].Rows[0][0]); sql = "INSERT INTO 抽獎規則([排序],[項目號],[獎項名稱],[中獎人數],[已經抽取],[批次數]) VALUES(" + prize.ID + ",'" + prize.Item + "','" + prize.Name + "'," + prize.Num + ", " + prize.YJNum + "," + prize.IsidNum + ")"; AccessHelper.ExecuteSql(sql); lbPrizeTile.Text = prize.Name.ToString(); } } catch (Exception ex) { } } /// <summary> /// 事先設置好的項目的單選按鈕的點擊事件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> void RdioOrther_CheckedChanged(object sender, EventArgs e) { LstUcnum.Clear();//清空已經抽獎明細 LstUcnum = new List<UCNum>(); //------------------------------------------ panel1.Controls.Clear(); //------------------------------------------ tbOtherCJNum.Text="0";// = new TextBox();//其他抽獎項目,記錄人數。 tbOtherCJNumName.Text = "加抽"+">";// new TextBox(); //其他抽獎項目,抽獎項目名稱。 GBQT.Visible = true; lbPrizeTile.Text = "加抽獎"; prize.ReMark = "新添加"; this.lb項目號.Text = "加抽獎"; this.lb總人數.Text = "0"; this.lb總批次.Text = "1"; this.lb已抽取.Text = "0"; lb完成批次.Text = "0"; } /// <summary> /// 未事先設置好的項目的單選按鈕的點擊事件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> void rad_CheckedChanged(object sender, EventArgs e) { LstUcnum.Clear();//清空已經抽獎明細 LstUcnum = new List<UCNum>(); //------------------------------------------ panel1.Controls.Clear(); //------------------------------------------ RadioButton R = (RadioButton)sender; GBQT.Visible = false; prize = GetCJItem(R.Tag.ToString()); this.lb項目號.Text = prize.Name; this.lb項目號.Tag = prize.Item; this.lb已抽取.Text = prize.YJNum.ToString(); this.lb總批次.Text = prize.IsidNum.ToString(); this.lb總人數.Text = prize.Num.ToString(); lb完成批次.Text = prize.YJIsidNum.ToString(); if (prize.YJIsidNum != prize.IsidNum) { lb抽獎狀態.Text = "第" + (prize.YJIsidNum).ToString() + "輪抽獎結束"; lbPrizeTile.Text = prize.Name+"第" + (prize.YJIsidNum).ToString() + "輪抽獎結束"; } else { lb抽獎狀態.Text = "抽獎結束!"; lbPrizeTile.Text = prize.Name+ ":抽獎結束!"; } if (prize.YJIsidNum == 0) { lbPrizeTile.Text = prize.Name+":待抽獎!"; } } #region ========================================抽獎四步操作 ======================================== /// <summary> /// 第一步、 獲取抽獎人數 /// </summary> /// <param name="item">抽獎號,抽獎項目號</param> /// <returns>返回抽獎信息</returns> public Prize GetCJItem(string item) { Prize Pze = new Prize(); Dictionary<int, int> dic = new Dictionary<int, int>(); StringBuilder sb = new StringBuilder(); sb.Append("SELECT "); sb.Append(" A.[排序],A.[項目號],A.[獎項名稱],A.[中獎人數],A.[限制因素],A.[已經抽取],A.[批次數] "); sb.Append("FROM [抽獎規則] AS A "); sb.Append("WHERE A.[項目號] = '" + item + "' "); DataTable DtCJNO = AccessHelper.DataSet(sb.ToString()).Tables[0]; sb.Clear(); sb.Append("SELECT COUNT(1) FROM [中獎人員] AS A WHERE A.[中獎號] = '" + item + "' "); //抽獎人數 int Count = Convert.ToInt32(AccessHelper.DataSet(sb.ToString()).Tables[0].Rows[0][0]); sb.Clear(); string 獎項名稱 = (DtCJNO.Rows[0]["獎項名稱"] == null) ? "" : DtCJNO.Rows[0]["獎項名稱"].ToString().Trim(); int 中獎人數 = (DtCJNO.Rows[0]["中獎人數"] == null) ? 0 : Convert.ToInt32(DtCJNO.Rows[0]["中獎人數"].ToString().Trim()); int 已經抽取 = (DtCJNO.Rows[0]["已經抽取"] == null) ? 0 : Convert.ToInt32(DtCJNO.Rows[0]["已經抽取"].ToString().Trim()); int 批次數 = (DtCJNO.Rows[0]["批次數"] == null) ? 0 : Convert.ToInt32(DtCJNO.Rows[0]["批次數"].ToString().Trim()); //、、---------------------------------------------------------- int 已抽獎批數 = 0; int _MaxNum = Convert.ToInt32(Math.Floor(中獎人數 * 1.0 / 批次數));//每批抽獎最少人數 //、、---------------------------------------------------------- int Max = _MaxNum; for (int i = 1; i <= 批次數; i++) { if (i == 批次數) { Max = 中獎人數 - (Max * (i - 1)); } dic.Add(i, Max); } if (已經抽取 < 中獎人數) { 已抽獎批數 = Convert.ToInt32(已經抽取 * 1.0 / _MaxNum); } else { 已抽獎批數 = 批次數; } Pze.IsidNum = 批次數; Pze.Item = item;//項目號 Pze.Name = 獎項名稱; Pze.Num = 中獎人數; Pze.YJNum = 已經抽取; Pze.YJIsidNum = 已抽獎批數; Pze.Dic = dic;//每批次,抽取 Pze.IsTrue = true; if (已抽獎批數 != 批次數) { Pze.ThisNum = dic[已抽獎批數 + 1]; } //-------------------------------------------------------------------------------------------- //抽獎程序異常,調整。 if (已經抽取 != Count) { Pze.IsTrue = false; //已經抽取的人數 設置為系統后台抽獎的實際總人數 已經抽取 = Count; //已經抽取 除以 每次抽取人數 然后取最小整數,作為已經抽獎完成的批次 Pze.YJIsidNum = Convert.ToInt32(Math.Floor(已經抽取 * 1.0 / _MaxNum)); //本次抽獎人數 Pze.ThisNum = Pze.Dic[已經抽取 + 1] - (Count - _MaxNum * Pze.YJIsidNum); } //----------------------------------------------------------------- return Pze; } /// <summary> /// 第二步、根據抽獎人數隨機抽取 /// </summary> /// <param name="DtNoPrize">員工列表</param> /// <param name="Num">當前要抽出多少人</param> /// <param name="ItemNumber">抽獎號</param> /// <returns>返回中獎人員明細:List<YG></returns> public List<YG> SetZJNum(DataTable DtNoPrize, int Num, string ItemNumber) { List<YG> lst = new List<YG>(); //所有未中獎的 DataRow[] DrCJItem = DtNoPrize.Select("[抽獎狀態] = '否' and (([中獎限制] = '普通') or ([中獎限制] = '必須中獎' and [中獎號] = '" + ItemNumber + "')) "); DataRow[] DrMax = DtNoPrize.Select("[抽獎狀態] = '否' and [中獎限制] = '必須中獎' and [中獎號] = '" + ItemNumber + "' "); if (DrCJItem.Length > Num) { foreach (DataRow dr in DrMax) { YG yg = new YG(); yg.YG_NO = dr["員工代號"].ToString(); yg.YG_Name = dr["員工代號"].ToString(); int Count = lst.Where(t => t.YG_NO == yg.YG_NO).ToList().Count; if (Count < 1) //.必須不能重復 { lst.Add(yg); } if (lst.Count == Num)//如果等於設定數量自動跳出 { break; } } //循環隨機獲取一個員工 while (true) { Random ran = new Random();// int i = ran.Next(DrCJItem.Length - 1); YG yg = new YG(); yg.YG_NO = DrCJItem[i]["員工代號"].ToString(); yg.YG_Name = DrCJItem[i]["員工名稱"].ToString(); int Count = lst.Where(t => t.YG_NO == yg.YG_NO).ToList().Count; if (Count < 1)//.必須不能重復 { lst.Add(yg); } if (lst.Count == Num)//如果等於設定數量自動跳出 { break; } } } return lst; } /// <summary> /// 第三步、分組框的設計 /// </summary> /// <param name="lst">中獎人員列表</param> /// <param name="NoLength">工號長度</param> /// <param name="Num">此處中獎人數</param> public void LoadContrl(List<YG> lst, int NoLength, int Num, int ThisWidth, int ThisHeight, bool blcj) { int H = 0;//組塊高度; int Hs = 0;//豎向高度 組塊高度+間距 int W = 0;//組塊寬度 int JG = 0;//組塊高度間隔; int Nqueue = 1;//最大放幾排; int NC = 0;//每排人數 int YJG = 0;//組塊Y軸間隔; int Mark = 93;//基數;需要大於等於93 //-------------------------------------------- int Hts = 0;//組塊高度; int Hsts = 0;//豎向高度 組塊高度+間距 int Wts = 0;//組塊寬度 int JGts = 0;//組塊高度間隔; int Nqueuets = 1;//最大放幾排; int NCts = 0;//每排人數 int YJGts = 0;//組塊Y軸間隔; int XJGts = 0;//X軸間隔; int KJGts = 0;//空白間隔; //-------------------------------------------- H = Convert.ToInt32(Math.Floor(ThisHeight * 1.0 / Num)) - 3; W = H * (NoLength + 1) + H * 3 + 4;//"Num+1":每個小框的間隔;"H * 3":留足3個空位填名字,+4留足每排的間隔 //組塊寬度>容器寬度 if (W > ThisWidth)//只放一排 { W = Convert.ToInt32(ThisWidth * 1.0); H = Convert.ToInt32( ( (ThisWidth - 4) * 1.0 ) / (Num + 1 + 3) ); JG = Convert.ToInt32( Math.Floor( ( ThisHeight - H * Num ) * 1.0 / Num ) ); for (int i = 0; i < lst.Count; i++) { ContrlSet(0, i * (H + JG), W, NoLength, LstYg, lst[i].YG_NO, lst[i].YG_Name, blcj); } } else { Hts = 0; Wts = 0; Hsts = 0; YJGts = 0; Nqueuets = 1; NCts = 0; Nqueue = Convert.ToInt32(Math.Floor(ThisWidth * 1.0 / W));//最多可以放多少排! //多排計算方式 for (int i = 1; i <= Nqueue; i++) { H = 0;//小模塊高度; W = 0;//小木塊寬度; NC = Convert.ToInt32(Math.Ceiling(Num * 1.0 / i));//總人數 / 排數 每排人數 H = Convert.ToInt32(Math.Floor((ThisHeight) * 1.0 / NC)) - 3; Hs = H + 3; W = H * (NoLength + 1) + H * 3 + 4;//"NoLength+1":每個小框的間隔;"H * 3":留足3個空位填名字,+4留足每排的間隔 if (W > (ThisWidth * 1.0 / i))//一排寬度;Width-3:留3個位置空余 { W = Convert.ToInt32(Math.Floor(ThisWidth * 1.0 / i)); H = Convert.ToInt32(Math.Floor((W - 4 - NC) * 1.0 / (NC + 3))) - 3; Hs = H + 3; } //------------------------------------------------------------------------- YJG = Convert.ToInt32( Math.Floor( ( ThisHeight - Hs * NC ) * 1.0 / NC ) ); //--------------------------------------------------------------------- if (H < Hts) { break; } Nqueuets = i; Hts = H; Wts = W; YJGts = YJG;// JG2 = JG0; NCts = NC; } Nqueue = Nqueuets;//最優排數 H = Hts;//最優高度 W = Wts;//最優組塊寬度 YJG = YJGts;//間隔 NC = NCts; //每排人數 int Counts = 0; for (int j = 0; j < NC; j++) { Counts = j; for (int t = 0; t < Nqueue; t++) { Counts = j * Nqueue + t; ContrlSet(t * (W + 1), j * (H + YJG), W, NoLength, LstYg, lst[Counts].YG_NO, lst[Counts].YG_Name, blcj); if (Counts == lst.Count - 1) { return; } } } } } /// <summary> /// 第四步、獲取當前獎項抽獎人員明細 /// </summary> /// <param name="Item"></param> /// <returns></returns> public List<YG> SetZJNum(string item) { List<YG> lst = new List<YG>(); string sql = "SELECT A.[員工代號] ,A.[員工名稱],A.[部門代號],A.[中獎號],A.[中獎名稱] FROM [中獎人員] AS A WHERE A.[中獎號]= '" + item + "'"; DataTable dt = AccessHelper.DataSet(sql).Tables[0]; for (int i = 0; i < dt.Rows.Count; i++) { YG yg = new YG(); yg.YG_NO = dt.Rows[i]["員工代號"].ToString(); yg.YG_Name = dt.Rows[i]["員工名稱"].ToString(); lst.Add(yg); } return lst; } /// <summary> /// 設置一個 單元塊的長寬,以及各模塊的大小 /// </summary> /// <param name="X">模塊的位置:X軸</param> /// <param name="Y">模塊的位置:Y軸</param> /// <param name="Width">模塊寬度;高度:(Width - 50) * 1.0 / N(小模塊個數)</param> /// <param name="N">小模塊個數</param> public void ContrlSet(int X, int Y, int Width, int N, List<YG> _lstyg, string ygno, string ygName, bool blcj) { //---------------------------------------------------------------------- int H = Convert.ToInt32( ( (Width - 4) * 1.0 ) / (N + 1 + 3) ); UCNum uc = new UCNum(this); //uc.dt = DtTemp; uc.LstYg = _lstyg; uc.name = ygName; uc.YgNo = ygno; uc.Width = Width;//留足空余寫名字 uc.Height = H;// Convert.ToInt32(Math.Floor((Width - 50) * 1.0 / N));//高度 uc.H = uc.Height - 4; uc.W = uc.Height - 4; //---------------------------------------------------------------------- uc.Num = N; uc.Size = new System.Drawing.Size(uc.Width, uc.Height);//大小 uc.Location = new System.Drawing.Point(X, Y); //位置 uc.Set(); LstUcnum.Add(uc); uc.Istrue = blcj; this.panel1.Controls.Add(uc); //---------------------------------------------------------------------- } #endregion ========================================抽獎四步操作 ======================================== /// <summary> /// 獲取所有人員明細 /// </summary> /// <param name="Item"></param> /// <returns></returns> public DataTable ReCJGZ(string Item) { if (Item.Trim() != "") { Item = " Where a.[項目號] = '" + Item + "' "; } string sql = "SELECT a.[排序],a.[項目號],a.[獎項名稱],a.[中獎人數],a.[限制因素],a.[已經抽取] FROM 抽獎規則 AS a " + Item + " ORDER BY a.排序 ASC "; DataTable DtCJ = AccessHelper.DataSet(sql).Tables[0]; return DtCJ; } #region ==========================================抽獎按鈕======================================== /// <summary> /// 抽獎按鈕 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void lbbtn_Click(object sender, EventArgs e) { try { if (lbbtn.Tag.ToString() == "開始") { IsTrue = true; lbbtn.Tag = "結束"; lbbtn.Image = imgEnd; //------------------------------------------ LstUcnum.Clear();//清空已經抽獎明細 LstUcnum = new List<UCNum>(); //------------------------------------------ panel1.Controls.Clear(); prize = GetCJItem(prize.Item); lb項目號.Text = prize.Name; lb總人數.Text = prize.Num.ToString(); lb已抽取.Text = prize.YJNum.ToString(); lb總批次.Text = prize.IsidNum.ToString(); lb完成批次.Text = prize.YJIsidNum.ToString(); List<YG> lstyg; if (prize.YJIsidNum != prize.IsidNum) { lbPrizeTile.Text = prize.Name + ":當前正在抽取第" + (prize.YJIsidNum + 1).ToString() + "輪獎"; lb抽獎狀態.Text = "當前正在抽取第" + (prize.YJIsidNum + 1).ToString() + "輪獎"; DataTable DtTemp = ReYg();//所有參與人員表 //--------------------------------------------- lstyg = SetZJNum(DtTemp, prize.ThisNum, prize.Item); LoadContrl(lstyg, YgNoLength, prize.ThisNum, panel1.Width - 4, panel1.Height, true); return; } else { lb抽獎狀態.Text = "抽獎結束!"; lbbtn.Image = imgStr; lbbtn.Tag = "開始"; lbPrizeTile.Text = prize.Name + ":抽獎完畢!"; } } else { try { lbbtn.Image = imgStr; lbbtn.Tag = "開始"; IsTrue = false; for (int i = 0; i < LstUcnum.Count; i++) { LstUcnum[i].Istrue = false; } SaveYJ_CJ();//抽獎結束保存抽獎結果。 LstUcnum.Clear(); LstUcnum = new List<UCNum>(); lbPrizeTile.Text = prize.Name + " 第" + prize.YJIsidNum + "輪抽獎完畢!"; } catch (Exception ex) { MessageBox.Show(ex.Message.ToString()); } } } catch (Exception ex) { MessageBox.Show(ex.Message.ToString()); } } /// <summary> /// 抽獎保存 /// </summary> public void SaveYJ_CJ() { try { if (LstUcnum.Count > 0) { int Count = 0; string sql = " "; OleDbConnection conn = new OleDbConnection(); OleDbCommand comm = new OleDbCommand(); conn.ConnectionString = AccessHelper.connectionString; comm.Connection = conn; conn.Open(); comm.CommandType = CommandType.Text; for (int i = 0; i < LstUcnum.Count; i++) { Count = Count + 1; comm.CommandText = "UPDATE [人員表] SET [抽獎狀態] = '是' WHERE [員工代號] ='" + LstUcnum[i].YgNo + "'"; comm.ExecuteNonQuery(); comm.CommandText = "INSERT INTO [中獎人員] ([員工代號],[員工名稱],[中獎號],[中獎名稱] )VALUES('" + LstUcnum[i].YgNo + "','" + LstUcnum[i].name + "','" + prize.Item + "','" + prize.Name + "')"; comm.ExecuteNonQuery(); } //---------------------------------------------------- //獲取此獎項已經抽過獎的數量 DataTable dt = new DataTable(); OleDbDataAdapter da = new OleDbDataAdapter(); try { comm.CommandType = CommandType.Text; comm.CommandText = "SELECT 已經抽取 FROM 抽獎規則 Where 項目號 = '" + prize.Item + "'"; da.SelectCommand = comm; da.Fill(dt); } catch (Exception e) { } int NumTemp = 0; try { NumTemp = Convert.ToInt32(dt.Rows[0]["已經抽取"]); } catch (Exception ) { NumTemp = 0; } //------------------------------------ //保存已經並匯總已經抽獎過的 sql = "UPDATE 抽獎規則 SET 已經抽取 = " + (NumTemp + LstUcnum.Count).ToString() + " WHERE 項目號 = '" + prize.Item + "' "; comm.CommandType = CommandType.Text; comm.CommandText = sql; comm.ExecuteNonQuery(); //--------------------------------------------------------- if (conn.State == ConnectionState.Open) { conn.Close(); conn.Dispose(); comm.Dispose(); } } } catch (Exception ex) { MessageBox.Show(ex.Message.ToString()); } //---------------------------------------------------------------- try { prize = GetCJItem(prize.Item); this.lb項目號.Text = prize.Name; this.lb項目號.Tag = prize.Item; this.lb已抽取.Text = prize.YJNum.ToString(); this.lb總批次.Text = prize.IsidNum.ToString(); this.lb總人數.Text = prize.Num.ToString(); lb完成批次.Text = prize.YJIsidNum.ToString(); if (prize.YJIsidNum != prize.IsidNum) { lb抽獎狀態.Text = "第" + (prize.YJIsidNum).ToString() + "輪抽獎結束"; } else { lb抽獎狀態.Text = "抽獎結束!"; } } catch (Exception ex) { MessageBox.Show(ex.Message.ToString()); } } #endregion ==========================================抽獎按鈕======================================== /// <summary> /// 窗體大小變化后自動調整功能框的位置 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void MainFrom_Resize(object sender, EventArgs e) { int W = this.Width; int H = this.Height; int lw = Convert.ToInt32(Math.Floor(W * 1.0 / 2)); int lw2 = Convert.ToInt32(Math.Floor(lbPrizeTile.Width * 1.0 / 2)); int lw3 = Convert.ToInt32(Math.Floor(lb標語.Width * 1.0 / 2)); lbPrizeTile.Location = new System.Drawing.Point(lw - lw2, 110); //位置 lb標語.Location = new System.Drawing.Point(lw - lw3, 60); //位置 //--------------------------------------------------------------------------- int lwgsmc = Convert.ToInt32(Math.Floor(LbGSMC.Width * 1.0 / 2)); LbGSMC.Location = new System.Drawing.Point(lw - lwgsmc, 5); //位置 //--------------------------------------------------------------------------- int PX = Convert.ToInt32(Math.Floor((H - 373) * 1.0 / 2)); PMeiun.Location = new System.Drawing.Point(0, PX); //位置 SY1 = PX; SY2 = PX + 400; //--------------------------------------------------------------------------- groupBox1.Location = new System.Drawing.Point(W - groupBox1.Width - 5, PX); //位置 //---------------------------------------------------------------------------- } private void timer1_Tick(object sender, EventArgs e) { if (this.mouseLocation.X < 178 && mouseLocation.Y > SY1 && mouseLocation.Y < SY2) { PMeiun.Width = 178; PMeiun.Height = 400; Cursor = Cursors.Hand; } else { PMeiun.Width = 1; PMeiun.Height = 1; } } private void MainFrom_MouseMove(object sender, MouseEventArgs e) { this.mouseLocation = e.Location; } private void lbbtn_MouseEnter(object sender, EventArgs e) { Cursor = Cursors.Hand; } private void lbbtn_MouseLeave(object sender, EventArgs e) { Cursor = Cursors.Default; } /// <summary> /// 快捷鍵操作 /// </summary> protected override bool ProcessCmdKey(ref Message msg, Keys keyData) { switch (keyData) { case Keys.Space://空格 { try { if (lbbtn.Tag.ToString() == "開始") { IsTrue = true; lbbtn.Tag = "結束"; lbbtn.Image = imgEnd; //------------------------------------------ LstUcnum.Clear();//清空已經抽獎明細 LstUcnum = new List<UCNum>(); //------------------------------------------ panel1.Controls.Clear(); prize = GetCJItem(prize.Item); lb項目號.Text = prize.Name; lb總人數.Text = prize.Num.ToString(); lb已抽取.Text = prize.YJNum.ToString(); lb總批次.Text = prize.IsidNum.ToString(); lb完成批次.Text = prize.YJIsidNum.ToString(); List<YG> lstyg; if (prize.YJIsidNum != prize.IsidNum) { lbPrizeTile.Text = prize.Name + ":當前正在抽取第" + (prize.YJIsidNum + 1).ToString() + "輪獎"; lb抽獎狀態.Text = "當前正在抽取第" + (prize.YJIsidNum + 1).ToString() + "輪獎"; DataTable DtTemp = ReYg();//所有參與人員表 //--------------------------------------------- lstyg = SetZJNum(DtTemp, prize.ThisNum, prize.Item); LoadContrl(lstyg, YgNoLength, prize.ThisNum, panel1.Width - 4, panel1.Height, true); } else { lb抽獎狀態.Text = "抽獎結束!"; lbbtn.Image = imgStr; lbbtn.Tag = "開始"; lbPrizeTile.Text = prize.Name + ":抽獎完畢!"; } } else { try { lbbtn.Image = imgStr; lbbtn.Tag = "開始"; IsTrue = false; for (int i = 0; i < LstUcnum.Count; i++) { LstUcnum[i].Istrue = false; } SaveYJ_CJ();//抽獎結束保存抽獎結果。 LstUcnum.Clear(); LstUcnum = new List<UCNum>(); lbPrizeTile.Text = prize.Name + " 第" + prize.YJIsidNum + "輪抽獎完畢!"; } catch (Exception ex) { MessageBox.Show(ex.Message.ToString()); } } } catch (Exception ex) { MessageBox.Show(ex.Message.ToString()); } } break; case Keys.F4://設置 { try { panel1.Controls.Clear(); LstUcnum.Clear(); LstUcnum = new List<UCNum>(); List<YG> lstyg; lstyg = SetZJNum(prize.Item); LoadContrl(lstyg, YgNoLength, lstyg.Count, panel1.Width - 4, panel1.Height, false); } catch (Exception) { } } break; case Keys.F1://設置 { FormPrizeSet f = new FormPrizeSet(this); f.ShowDialog(); } break; case Keys.F2://查詢功能等節目 { FormSearch f = new FormSearch(); f.ShowDialog(); //MessageBox.Show("F2"); } break; case Keys.F3://查詢功能等節目 { Form1 f = new Form1(); f.ShowDialog(); } break; case Keys.Escape://查詢功能等節目 { SetFormFullScreen(false); WindowState = System.Windows.Forms.FormWindowState.Minimized; } break; case Keys.Delete://查詢功能等節目 { try { panel1.Controls.Clear(); LstUcnum.Clear(); LstUcnum = new List<UCNum>(); int Count = 0; string sql = " "; OleDbConnection conn = new OleDbConnection(); OleDbCommand comm = new OleDbCommand(); conn.ConnectionString = AccessHelper.connectionString; comm.Connection = conn; conn.Open(); //---------------------------------------------------------------------- comm.CommandType = CommandType.Text; comm.CommandText = "UPDATE [人員表] SET [抽獎狀態] = '否',中獎限制='普通',[中獎號]='',[中獎名稱]='' "; comm.ExecuteNonQuery(); //---------------------------------- comm.CommandText = "DELETE FROM [中獎人員]"; comm.ExecuteNonQuery(); //----------------------------------- comm.CommandText = "UPDATE [抽獎規則] SET [已經抽取]=0 "; comm.ExecuteNonQuery(); //---------------------------------------------------------------------- if (conn.State == ConnectionState.Open) { conn.Close(); conn.Dispose(); comm.Dispose(); } MessageBox.Show("重置完成"); } catch (Exception ex) { MessageBox.Show(ex.Message.ToString()); } } break; case Keys.F5://查詢功能等節目 { panel1.Controls.Clear(); LstUcnum.Clear(); LstUcnum = new List<UCNum>(); //A.[員工代號],A.[員工名稱],A.[部門代號],B.[部門名稱],A.[抽獎狀態],a.[中獎限制],A.[中獎號],A.[中獎名稱] #region ==================================加載所有員工====================================== DataTable DtAllYg = ReYg(); for (int i = 0; i < DtAllYg.Rows.Count; i++) { YG y = new YG(); YG xzy = new YG(); y.YG_NO = DtAllYg.Rows[i]["員工代號"].ToString(); y.YG_Name = DtAllYg.Rows[i]["員工名稱"].ToString(); LstYg.Add(y); } #endregion ==================================加載所有員工====================================== BackgroundImageLoad();//背景圖片加載 #region =====================================全屏設置============================================ SetFormFullScreen(true); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; this.WindowState = System.Windows.Forms.FormWindowState.Maximized; #endregion=====================================全屏設置============================================ PrizeLoad();//抽獎項目加載 GetNoLength();//獲取人員工號長度 lbbtn.Tag = "開始"; } break; case Keys.F12://查詢功能等節目 { SetFormFullScreen(false); Application.Exit(); } break; } return base.ProcessCmdKey(ref msg, keyData); } private void MainFrom_FormClosing(object sender, FormClosingEventArgs e) { SetFormFullScreen(false); } } }
源碼9 9...¥,加我Q