说明:

1>窗体应用程序。

2>一个窗体(Form1),一个按钮(btnStart),一个文本(labTime)

3>截图:

4>代码如下:

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.Data.SqlClient;

using System.Collections;



namespace CaiCaiKan {

    public partial class Form1 : Form {

        public Form1() {

            InitializeComponent();

        }



        System.Threading.Thread Gthread;//定义线程

        Random Grandom = new Random();//定义随机数对象 

        int Gnum;//定义变量用于存放存机数 





        private void btnStart_Click(object sender, EventArgs e) {

            RemoveControl();//清空所有无用对象

            btnStart.Enabled = false;//设置开始按钮不可用

            //生成100个按钮,10横10竖

            int px = 10;//第一个按钮的位置

            int py = 60;

            for (int i = 0; i < 100; i++) {

                Button btn = new Button();//给按钮赋值,定义宽和高

                btn.Name = (i+1).ToString();

                btn.Text = (i+1).ToString();

                btn.Width = 35;

                btn.Height = 35;

                btn.Location = new Point(px, py);

                btn.Click += new EventHandler(btn_Click);//定义按钮事件

                px += 36;

                if ((i + 1) % 10 == 0) {

                    px = 10;

                    py += 36;

                }

                Controls.Add(btn);//将button按钮放入窗体控件集合中

            }





            //新建一个线程

            Gthread = new System.Threading.Thread(delegate()

                {

                    int count = 0;//初始化计数器   

                    while (true)//开始无限循环                

                    {

                        //计数器累加  

                        count = ++count > 100000000 ? 0 : count;//设置最大数值

                        this.Invoke(//将代码交给主线程执行  

                        (MethodInvoker)delegate//使用匿名方法  

                        {

                            //窗体中显示计数

                            labTime.Text = "用时:" + count.ToString() + " 秒";                

                        });    

                        //线程睡眠1秒    

                        System.Threading.Thread.Sleep(1000);          

                    }                 

                });

            Gthread.IsBackground = true;//设置线程为后台线程   

            Gthread.Start();//开始执行线程            

            Gnum = Grandom.Next(1, 100);//生成随机数    

        }

         

         // 用于清空窗体中动态生成的按钮  

         void RemoveControl()    

         {            

             for (int i = 0; i < 100; i++)//开始遍历100个按钮      

             {             

                if (Controls.ContainsKey((i + 1).ToString()))   //窗体中是否有此按钮         

                {                 

                    for (int j = 0; j < Controls.Count; j++)//遍历窗体控件集合            

                    {                   

                        if (Controls[j].Name ==(i + 1).ToString()) //是否查找到按钮                     

                        {                          

                            Controls.RemoveAt(j);//删除指定按钮  

                            break;           

                        }        

                    }           

                }           

            }       

        }

   

        //自动生成的按钮事件

        void btn_Click(object sender, EventArgs e)    

        {          

            Control P_control = sender as Control;//将sender(存放的是指向实体对象的指针)转换为control类型对象

            if (int.Parse(P_control.Name) > Gnum)          

            {            

                P_control.BackColor = Color.Red;//设置按钮背景为红色  

                P_control.Enabled = false;//设置按钮停用            

                P_control.Text = "大";//更改按钮文本          

            }

            if (int.Parse(P_control.Name) < Gnum)          

            {              

                P_control.BackColor = Color.Red;//设置按钮背景为红色 

                P_control.Enabled = false;//设置按钮停用             

                P_control.Text = "小";//更改按钮文本       

            }

            if (int.Parse(P_control.Name) == Gnum)          

            {              

                Gthread.Abort();//终止计数线程 

                //显示游戏信息

                MessageBox.Show(string.Format("恭喜你猜对了!共猜了{0}次 {1}", GetCount(), labTime.Text), "恭喜!");          

                btnStart.Enabled = true;//启用开始按钮   

               

            }       

        }

    

        //获取已点击按钮个数

        string GetCount()      

         {          

            int temp = 0;//初始化计数器     

             foreach (Control c in Controls)//遍历控件集合     

             {

                 // 用于查找窗体中Enable属性为False控件的数量 

                 if (!c.Enabled) {

                     temp++;//计数器累加 

                 }

             }

             return temp.ToString();//返回计数器信息  

         }      





        //关闭窗体

        private void Form1_FormClosing(object sender, FormClosingEventArgs e)      

        {           

             Environment.Exit(0);//强行关闭窗体,应用程序即强制退出。   

        }  





    }

}

版权声明:本文为博主原创文章,未经博主允许不得转载。

最新文章

  1. EHcache缓存框架详解
  2. [mondrian] 分析一个简单的schema文件
  3. Linux/RedHat 编译安装GNU gcc 4.9.0 (g++)
  4. PowerDesigner(五)-概念数据模型(CDM生成LDM,PDM和OOM)
  5. Python学习入门基础教程(learning Python)--3.3.3 Python逻辑关系表达式
  6. Java的Log系统介绍和切换(转)
  7. HTML5 学习01
  8. MyBatis工作原理
  9. 织梦DedeCms获取当前页面URL地址的调用方法
  10. 谈谈你对this对象的理解
  11. [NOIP2014D2]
  12. makefile笔记6 - makefile条件判断
  13. C# 使用缓存数据模拟抢购
  14. BZOJ3676 APIO2014回文串(manacher+后缀自动机)
  15. 第七章|7.4并发编程| I/O模型
  16. hdu4607Park Visit 树的直径
  17. Prolog学习:用八卦的精神走进Prolog
  18. sencha touch list 选择插件,可记忆已选项,可分组全选
  19. eclipse svn最新更新地址
  20. struts2 select标签

热门文章

  1. Windows phone 之自定义控件(补充)
  2. HDU 5491 The Next
  3. Jquery 实现瀑布流功能
  4. iOS: 属性列表介绍 Introduction to Property Lists
  5. css的继承、层叠和特殊性
  6. 我们说的oc是动态运行时语言是什么意思?
  7. 完美方案——iOS的WebView自适应内容高度
  8. Quartz1.8.5例子(七)
  9. Unity干中学——如何实现游戏截图?
  10. bzoj 3744: Gty的妹子序列 主席树+分块