首页 > 代码库 > 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);//强行关闭窗体,应用程序即强制退出。
}
}
}
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。