[C#學(xué)習(xí)筆記22]OOP類編寫、UI與業(yè)務(wù)結(jié)合技巧
新建Model文件夾,添加小區(qū)類、選號器類
小區(qū)類:封裝數(shù)據(jù)
public?class?House
{
????public?List<string> Numbers{get;set;}
}
public class Selector
{
????//A區(qū)房號
????public List<string> ANumberList{get;set;}
????//B區(qū)房號
????public List<string> BNumberList{get;set;}
????//存儲選擇的號碼
????public List<House>?SelectedNums{get;set} = new List<House>
????private Random random = new Random();//隨機(jī)數(shù)生成器,僅在本類內(nèi)部使用
????//構(gòu)造方法:初始化小區(qū)房號
????public Selector()
????{
????????ANumberList = new List<string>
????????{
????????????"01","02","03","04","05","06","07","08",“09”,"10","11"
????????};
? ? ? ??BNumberList = new List<string>
????????{
????????????"01","02","03","04","05","06",“07”
????????};
????}
????//生成4個隨機(jī)號碼
????public List<string> CreateRandomNum()
????{
????????List<string> numList = new List<string>{};
????????//生成3個A區(qū)號
????????while(true)
????????{
????????????if(numList.Count == 3) break;//隨機(jī)選取了三個數(shù)字了
????????????string num = ANumberList[random.Next(11)];
????????????if(numList.Contains(num))
????????????????continue;//如果是重復(fù)的數(shù)字,則重新隨機(jī)抽取
????????????else
????????????????numList.Add(num);
????????}
????????//生成一個B區(qū)號
????????numList.Add(BNumberList[random.Next(7)]);
????????return numList;
????}
}
在UI中創(chuàng)建選號器對象
private?Selector newSelector = new Selector();
//啟動選號按鈕事件處理
private void btnStart_Click(object sender, EventArgs e)
{
????this.timerCreateNum.Start();//啟動定時器
????this.btnSelect.Enabled = true;
????this.btnStart.Enabled = false;
}
//開始選號按鈕事件處理
private void btnSelect_Click(object sender, EventArgs e)
{
? ? this.timerCreateNum.Stop();
????this.btnSelect.Enabled = false;
????this.btnStart.Enabled = true;
//創(chuàng)建雙色球?qū)ο?/p>
House hs = new House
{
????Numbers = this.randomNum
};
//添加到選號池,備用保存等方法使用
this.newSelector.SelectedNums.Add(hs);
//顯示號碼
string num = string.Empty;
foreach(string item in this.randomNum)
{
????num += item+ " ";
}
this.lbNumberList.Items.Add(num);
}
//清除
private?void?btnDel_Click(object sender, EventArgs e)
{
? ? this.newSelector.SelectedNums.Clear();//從集合中清除
????this.lbNumberList.Items.Clear();//從列表中清除
}
組件Timer在界面不可見,屬性Interval(50)
//定時器事件50ms調(diào)用一次
private void timerCreateNum_Tick(object sender,EventArgs e)
{
//通過通用選號器得到隨機(jī)數(shù)
????List<string> randomNum = newSelector.CreateRandomNum();
//在列表中顯示
????this.lblNum1.Text = randomNum[0];
????this.lblNum2.Text = randomNum[1];
? ? this.lblNum3.Text = randomNum[2];
????this.lblNum4.Text = randomNum[3];
}