今天開始整理電腦中的胡亂檔案,發現有很多自己用來練手用的小檔案非常有意思,裡面有個這樣的程式。有次系裡面搞活動,需要對現場觀眾進行抽獎,當時胡自己用flash設計了個,我覺得有意思就想自己寫一個,但是當時我還原後還沒有裝vs,只有個.net framework。我一直就很喜歡用記事本來寫一些簡單的資料結構和演算法題目,但是winform的程式還沒試過,但是我覺得應該是可以的。所以琢磨了一下午,完成了程式。當時心裡還是挺高興的,所以現在還記得這件事,但是當時沒有記錄下來,結果到前幾天我為了產生一個沒有dos視窗的背景程式試了很久才想起它。
我不是自虐狂,放著犀利的VS不用,而用記事本去寫程式。只是覺得有時候沒有必要用到VS這把牛刀來砍螞蟻,而且我喜歡研究VS它本身到底是怎麼來實現某些意想不到的功能的,我也只能做些粗淺的探索。
程式的功能很簡單,只是對14排30列的座位進行抽獎,主持人點擊開始或停止來抽取幾名幸運觀眾,因為這隻是個類比,我很簡單的調用Threading.timer然後直接用隨機數來抽取,也許會出現多次中獎的“幸運兒”:) 。主要問題是winform程式的編寫,首先要引用System.Windows.Forms命名空間,然後在類中聲明需要使用的控制項變數,然後在建構函式中初始化控制項,然後將控制項添加到容器中。其實我也不知道該怎麼正確的表述,看代碼吧。基礎知識看來還得加強啊。
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Windows.Forms;using System.Threading;using System.Drawing;using System.Drawing.Drawing2D;public class Lottery : Form{ private Panel panel1; private Label lblRow; private Label lblSeat; private Label numFront; private Label numRear; private Button btnStart; private readonly int interval = 25; //timer的觸發時段 private System.Threading.Timer timer = null; private bool flag=true; public Lottery() { panel1 =new Panel(); lblRow = new Label(); numFront = new Label(); lblSeat = new Label(); numRear = new Label(); btnStart=new Button(); this.panel1.SuspendLayout(); this.SuspendLayout(); this.AutoSize =true; panel1.BackColor = System.Drawing.Color.Transparent; this.panel1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; panel1.Controls.Add(lblRow); panel1.Controls.Add(numFront); panel1.Controls.Add(lblSeat); panel1.Controls.Add(numRear); panel1.Controls.Add(btnStart); this.Controls.Add(panel1); lblRow.Text="排"; lblRow.Location = new Point(0,20); lblRow.Size = new Size(20,20); numFront.Text="*"; numFront.Location = new Point(20,20); numFront.Size = new Size(20,20); lblSeat.Text="座"; lblSeat.Location = new Point(40,20); lblSeat.Size = new Size(20,20); numRear.Text="*"; numRear.Location = new Point(60,20); numRear.Size = new Size(20,20); btnStart.Text = "Start"; btnStart.Location = new Point(100,60); btnStart.Size = new Size(60,30); btnStart.Click+=new System.EventHandler(this.btnStart_Click); } public void btnStart_Click(object sender,System.EventArgs e) { if(btnStart.Text.Equals("Start")) { Start(); btnStart.Text = "Pause"; } else { Stop(); btnStart.Text ="Start"; } } public void Start() { timer = new System.Threading.Timer(new TimerCallback(Walke), null, 100, interval); } public void Walke(object o) { int tmp; Random r = new Random(); tmp = r.Next(14); numFront.Text = tmp.ToString(); tmp = r.Next(30); numRear.Text = tmp.ToString(); } public void Stop() { timer.Dispose(); } [STAThread] public static void Main(string[] args) { Application.Run(new Lottery()); }}
還有個很重要的編譯命令:
編輯form時,消掉dos介面
csc /t:winexe Program.cs