C#用timer控件实现1~100随机数抽奖,已经抽中的不参与下一次循环,求代码 50

我的页面是用一个button来点击开始和停止,Timer控制出来的随机数用label在页面滚动显示,停止的时候出来一个数,再开始滚动的时候这个数就不包括在里面了。求代码,... 我的页面是用一个button来点击开始和停止,Timer控制出来的随机数用label在页面滚动显示,停止的时候出来一个数,再开始滚动的时候这个数就不包括在里面了。求代码,哪位大神能指点一下... 展开
 我来答
Mr游客
2016-11-26 · TA获得超过214个赞
知道小有建树答主
回答量:105
采纳率:0%
帮助的人:63.2万
展开全部

我用多线程写的,你可以参考下。

系统界面图如下:(注:重置功能为清除已经中奖号码,回归1-100都可以中奖状态。)

代码:


    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        System.Threading.Thread g_Thread = null;

        List<int> g_list = new List<int>();

        int g_Num = 0;

        delegate void g_delegate();
        /// <summary>
        /// 开始
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button2_Click(object sender, EventArgs e)
        {
            if(g_list.Count==100)
            {
                MessageBox.Show("所有数字已使用,请重置!");

                return;
            }
            button3.Enabled = true;
            Random r = new Random();
            g_delegate dele= ChangeTxt;
            g_Thread = new System.Threading.Thread(() =>
            {
                while(this.IsDisposed==false)
                {
                    g_Num = r.Next(1, 100);
                    if(g_list.Contains(g_Num))
                    {
                          g_Num =  1;
                    }
                    while(g_list.Contains(g_Num))
                    {
                        g_Num++;
                    }
                    this.Invoke(dele);
                    System.Threading.Thread.Sleep(50);
                }
            });
            g_Thread.Start();
        }
        void ChangeTxt()
        {
            label2.Text = g_Num.ToString();
        }
        /// <summary>
        /// 停止
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button3_Click(object sender, EventArgs e)
        {
            //if(g_Thread.ThreadState==System.Threading.ThreadState.Running)
            {
                g_Thread.Abort();
                g_list.Add(Convert.ToInt32(label2.Text));
            }
            button3.Enabled = false;
        }
        /// <summary>
        /// 重置
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button1_Click(object sender, EventArgs e)
        {
            g_list.Clear();
        }

        private void Form1_FormClosed(object sender, FormClosedEventArgs e)
        {
            System.Environment.Exit(0);
        }
    }


追问
请问Timer控件应该怎么写呀,我需要页面滚动显示随机数
追答

大致如下:

  1. 添加Timer控件;

  2. 设置间隔时间属性

 timer1.Interval = 20;//设置间隔时间-毫秒

3.在button_Click事件添加:

 timer1.Start();//开始按钮触发

4.需要执行的操作:

 /// <summary>
        /// 每当经过指定时间间隔发生
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void timer1_Tick(object sender, EventArgs e)
        {
            //要执行的操作
        }

5.结束按钮:

timer1.Stop();//结束按钮触发
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式