首页 > 代码库 > winform 猜猜看

winform 猜猜看

说明:

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


    }
}