说明:

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);//强行关闭窗体,应用程序即强制退出。   

        }  





    }

}

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

winform 猜猜看 分类: WinForm 2014-08-21 14:12 267人阅读 评论(0) 收藏的更多相关文章

  1. iOS正则表达式 分类: ios技术 2015-07-14 14:00 35人阅读 评论(0) 收藏

    一.什么是正则表达式 正则表达式,又称正规表示法,是对字符串操作的一种逻辑公式.正则表达式可以检测给定的字符串是否符合我们定义的逻辑,也可以从字符串中获取我们想要的特定部分.它可以迅速地用极简单的方式 ...

  2. Poj 2528 Mayor's posters 分类: Brush Mode 2014-07-23 09:12 84人阅读 评论(0) 收藏

    Mayor's posters Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 40570   Accepted: 11798 ...

  3. cubieboard变身AP 分类: ubuntu cubieboard 2014-11-25 14:04 277人阅读 评论(0) 收藏

    加载bcmdhd模块:# modprobe bcmdhd 如果你希望开启 AP 模式,那么:# modprobe bcmdhd op_mode=2 在/etc/modules文件内添加bcmdhd o ...

  4. printf "%.*s" 分类: 小细节 2015-07-04 14:36 2人阅读 评论(0) 收藏

    ref : http://www.cnblogs.com/yuaqua/archive/2011/10/21/2219856.html 小数点.后"*"表示输出位数,具体的数据来自 ...

  5. Eclipse和MyEclipse的区别 分类: 编程工具 2015-07-18 11:12 23人阅读 评论(0) 收藏

    今天,在一个Q群里有人问Eclipse和MyEclipse的区别.虽然对于知道的人来说答案很简单,但是对于不知道的人来说就很难,很多问题也都是这样的,会者不难,难者不会. 其实,网上搜搜答案就挺多的, ...

  6. IIS上虚拟站点的web.config与主站点的web.config冲突解决方法 分类: ASP.NET 2015-06-15 14:07 60人阅读 评论(0) 收藏

    IIS上在主站点下搭建虚拟目录后,子站点中的<system.web>节点与主站点的<system.web>冲突解决方法: 在主站点的<system.web>上一级添 ...

  7. C++实现不能被继承的类——终结类 分类: C/C++ 2015-04-06 14:48 64人阅读 评论(0) 收藏

    1.       问题 C++如何实现不能被继承的类,即终结类.Java中有final关键字修饰,C#中有sealed关键字修饰,而C++目前还没有类似的关键字来修饰类实现终结类,需编程人员手动实现. ...

  8. Dungeon Master 分类: 搜索 POJ 2015-08-09 14:25 4人阅读 评论(0) 收藏

    Dungeon Master Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 20995 Accepted: 8150 Descr ...

  9. Codeforces 343D Water Tree 分类: Brush Mode 2014-10-05 14:38 98人阅读 评论(0) 收藏

    Mad scientist Mike has constructed a rooted tree, which consists of n vertices. Each vertex is a res ...

随机推荐

  1. angularjs跨域调取webservice

    1.配置 web.config <webServices> <!--必须添加--> <protocols> <add name="HttpGet&q ...

  2. 【实习记】2014-08-26都是回车惹的祸——shell脚本必须是unix行尾

        事情由起:svn的url在excel里,我复制到txt文本下,vi做些文本处理,只提取了url,保存为url.txt.再用vi处理url.txt,加上svn checkout等词,变成可以运行 ...

  3. Node.js(window)基础(2)——node环境下的模块,模块间调用

    参考:http://www.liaoxuefeng.com/wiki/001434446689867b27157e896e74d51a89c25cc8b43bdb3000/00143450241959 ...

  4. css3多行省略号

    -webkit-line-clamp 概述: -webkit-line-clamp 是一个 不规范的属性(unsupported WebKit property),它没有出现在 CSS 规范草案中. ...

  5. ecshop安装程序源码阅读-安装脚本(2)

    检查环境变量: 程序目录:图片目录,数据目录,临时目录 模板目录下模板文件 数据库连接函数 数据库配置: 读取数据库列表 创建配置文件(数据库,语言,session有效期等) 创建数据表 创建初始化数 ...

  6. 编程框架—Autofac

    Autofac是一款轻量级的IOC框架,性能高. Autofac基本使用步骤: 1.创建容器建造者(Builder): 2.对Builder注册类型. 3.Buildder创建容器(Container ...

  7. 关于PowerDesigner

    1. PowerDesigner将所有的小写改为大写:Tools->Model Option->左侧菜单中“Naming conversion”->Column->Code – ...

  8. UITableView 全面详解

    在iOS开发中UITableView可以说是使用最广泛的控件,我们平时使用的软件中到处都可以看到它的影子,类似于微信.QQ.新浪微博等软件基本上随处都是UITableView.当然它的广泛使用自然离不 ...

  9. C#转义字符总结

    转义字符 \·一种特殊的字符常量:·以反斜线"\"开头,后跟一个或几个字符.·具有特定的含义,不同于字符原有的意义,故称“转义”字符.·主要用来表示那些用一般字符不便于表示的控制代 ...

  10. [BZOJ 2594] [Wc2006]水管局长数据加强版 【LCT】

    题目链接:BZOJ - 2594 题目分析 这道题如果没有删边的操作,那么就是 NOIP2013 货车运输,求两点之间的一条路径,使得边权最大的边的边权尽量小. 那么,这条路径就是最小生成树上这两点之 ...