Winform 随机抽奖小程序
效果图:

主要代码:
Form1.cs
using System;
using System.Drawing;
using System.IO;
using System.Runtime.InteropServices;
using System.Windows.Forms; namespace WindowsFormsApp2
{
public partial class Form1 : Form
{
static string path = "抽奖.txt";
string[] content = File.ReadAllLines(path); public Form1()
{
InitializeComponent(); //控制名称变化时闪烁问题
this.DoubleBuffered = true;//设置本窗体
SetStyle(ControlStyles.UserPaint, true);
SetStyle(ControlStyles.AllPaintingInWmPaint, true); // 禁止擦除背景.
SetStyle(ControlStyles.DoubleBuffer, true); // 双缓冲
} private void Form1_Load(object sender, EventArgs e)
{
this.Resize += new EventHandler(Form1_Resize);
X = this.Width;
Y = this.Height;
setTag(this);
Form1_Resize(new object(), new EventArgs()); loadBackImage();
//this.timer1.Interval = 2000; //设置按钮背景透明、无边框
this.btn_BeginEnd.BackColor = Color.Transparent;
this.btn_BeginEnd.FlatStyle = FlatStyle.Flat;
this.btn_BeginEnd.FlatAppearance.BorderSize = ;
} private void timer1_Tick(object sender, EventArgs e)
{
try
{
Random r = new Random();
int i = r.Next(, content.Length);
label1.Text = content[i];
}
catch (Exception ex)
{
timer1.Stop();
MessageBox.Show(ex.Message);
btn_BeginEnd.Text = "开始";
return;
}
} private void btn_BeginEnd_Click(object sender, EventArgs e)
{
if (btn_BeginEnd.Text == "开始")
{
timer1.Start();
btn_BeginEnd.Text = "抽奖中...";
}
else
{
timer1.Stop();
btn_BeginEnd.Text = "开始";
}
} /// <summary>
/// 背景图自适应窗体
/// </summary>
private void loadBackImage()
{
string fbImage = "背景.jpg";
var bm = new Bitmap(fbImage); //fbImage图片路径
this.BackgroundImage = bm;//设置背景图片
this.BackgroundImageLayout = ImageLayout.Stretch;//设置背景图片自动适应
} private void Form1_SizeChanged(object sender, EventArgs e)
{
loadBackImage();
} #region 控件跟随窗体自适应大小
private float X;
private float Y;
private void setTag(Control cons)
{
foreach (Control con in cons.Controls)
{
con.Tag = con.Width + ":" + con.Height + ":" + con.Left + ":" + con.Top + ":" + con.Font.Size;
if (con.Controls.Count > )
{
setTag(con);
}
}
}
private void setControls(float newx, float newy, Control cons)
{
foreach (Control con in cons.Controls)
{
string[] mytag = con.Tag.ToString().Split(new char[] { ':' });
float a = Convert.ToSingle(mytag[]) * newx;
con.Width = (int)a;
a = Convert.ToSingle(mytag[]) * newy;
con.Height = (int)(a);
a = Convert.ToSingle(mytag[]) * newx;
con.Left = (int)(a);
a = Convert.ToSingle(mytag[]) * newy;
con.Top = (int)(a);
Single currentSize = Convert.ToSingle(mytag[]) * Math.Min(newx, newy);
con.Font = new Font(con.Font.Name, currentSize, con.Font.Style, con.Font.Unit);
if (con.Controls.Count > )
{
setControls(newx, newy, con);
}
}
} //双缓冲,控制窗体改变大小时闪烁问题
[DllImport("user32")]
private static extern int SendMessage(IntPtr hwnd, int wMsg, int wParam, IntPtr lParam);
private const int WM_SETREDRAW = 0xB;
private void Form1_Resize(object sender, EventArgs e)
{
SendMessage(this.Handle, WM_SETREDRAW, , IntPtr.Zero);
float newx = (this.Width) / X;
float newy = this.Height / Y;
setControls(newx, newy, this);
SendMessage(this.Handle, WM_SETREDRAW, , IntPtr.Zero);
this.Invalidate(true);
} /// <summary>
/// 设置label自适应窗体居中显示
/// </summary>
/// <param name="e"></param>
protected override void OnResize(EventArgs e)
{
base.OnResize(e);
int x = (int)(0.5 * (this.Width - label1.Width));
int y = label1.Location.Y;
label1.Location = new System.Drawing.Point(x, y);
}
#endregion #region 监听鼠标状态,改变按钮样式
private void btn_BeginEnd_MouseLeave(object sender, EventArgs e)
{
this.btn_BeginEnd.ForeColor = Color.White;
this.btn_BeginEnd.Font = new Font(btn_BeginEnd.Font, FontStyle.Regular);
} private void btn_BeginEnd_MouseMove(object sender, MouseEventArgs e)
{
this.btn_BeginEnd.FlatAppearance.MouseOverBackColor = Color.Transparent;
this.btn_BeginEnd.Font = new Font(btn_BeginEnd.Font, FontStyle.Bold);
} private void btn_BeginEnd_MouseClick(object sender, MouseEventArgs e)
{
this.btn_BeginEnd.FlatAppearance.MouseDownBackColor = Color.Transparent;
} private void btn_BeginEnd_MouseDown(object sender, MouseEventArgs e)
{
this.btn_BeginEnd.FlatAppearance.MouseDownBackColor = Color.Transparent;
}
#endregion
}
}
修改为可作弊的抽奖小程序:
//修改代码: private void btn_BeginEnd_Click(object sender, EventArgs e)
{
if (btn_BeginEnd.Text == "开始")
{
timer1.Start();
btn_BeginEnd.Text = "抽奖中...";
//this.txt_MaxValue.Enabled = false;
}
else
{
//timer1.Stop();
//btn_BeginEnd.Text = "开始";
//this.txt_MaxValue.Enabled = true;
}
} protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
if (keyData == Keys.D1 || keyData == Keys.NumPad1)
{
timer1.Stop();
label1.Text = ConfigurationManager.AppSettings["First"];
btn_BeginEnd.Text = "开始";
}
if (keyData == Keys.D2 || keyData == Keys.NumPad2)
{
timer1.Stop();
label1.Text = ConfigurationManager.AppSettings["Second"];
btn_BeginEnd.Text = "开始";
}
if (keyData == Keys.D3 || keyData == Keys.NumPad3)
{
timer1.Stop();
label1.Text = ConfigurationManager.AppSettings["Third"];
btn_BeginEnd.Text = "开始";
}
return true;
}
txt内容:

App.config内容:

Winform 随机抽奖小程序的更多相关文章
- 用jquery实现抽奖小程序
用jquery实现抽奖小程序 这些日子,到处都可以看到关于微信小程序的新闻或报到,在博客园中写关于微信小程序的也不少.但是今天我要说的不是微信小程序,而是用简单的jquery写的一个好玩的抽奖小程序. ...
- 用 python 写一个年会抽奖小程序
使用 pyinstaller 打包工具常用参数指南 pyinstaller -F demo.py 参数 含义 -F 指定打包后只生成一个exe格式的文件 -D –onedir 创建一个目录,包含exe ...
- Excel VBA活动抽奖小程序
在活动中,我们常会有抽奖,抽奖箱准备繁琐,现在多采用线上抽奖方式,下面用Excel VBA写了一个简单的抽奖小程序 简单测试效果如下,可实现: 多次抽奖,且每次抽奖都不重复 抽奖界面滚动人员信息,点击 ...
- 300道随机四则运算小程序(java编写)
这是由Java编写的300道随机四则运算小程序, 运算数范围为0~100(不包括100),运算结果保留两位小数. 程序代码: import java.util.*; class Yunsuan{ pu ...
- 抽奖小程序,js,canvas
js写的网页抽奖小程序,先上截图 源码地址:https://github.com/xiachaoxulu/raffle
- WinForm版图像编辑小程序(实现图像拖动、缩放、旋转、抠图)
闲暇之余,开发一个图片编辑小程序.程序主要特点就是可方便的对多个图像编辑,实现了一些基本的操作.本文主要介绍一下程序的功能.设计思路. 执行程序 下载地址: 百度网盘.https://pan.baid ...
- java实现课堂随机点名小程序
通过jdbc连接数据库实现读取学生花名册进行随机点名! ~jdbc连接mysql数据库 || 注释部分代码可通过读取.txt文档实现显示学生信息 ~通过点击开始按钮实现界面中间标签不断更新学生信息 ...
- 随机点名小程序--- -JAVA版本
话不多少,直接上代码 一个能够直接运行的随机点名的小程序,一个界面化的小程序.望广大网友多多支持! 1.创建一个随机点名的类 public class ProcessRandomName { JFra ...
- .NET WinForm画树叶小程序
看了一片文章(http://keleyi.com/a/bjac/nurox416.htm),是使用分型画树叶,代码是Java的,因为Java很久没弄了,改用C#实现,下载地址: 画树叶小程序下载 核心 ...
随机推荐
- setTimeout(call,0)作用
setTimeout(call,0)作用 经常看到setTimeout延时0ms的javascript代码,感到很迷惑,难道延时0ms和不延时不是一个道理吗?后来通过查资料以及实验得出以下两个作用, ...
- Oracle忘记用户名和密码
Microsoft Windows [版本 10.0.16299.192](c) 2017 Microsoft Corporation.保留所有权利. C:\WINDOWS\system32>e ...
- python3练习100题——028
原题链接:http://www.runoob.com/python/python-exercise-example28.html 题目:有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁.问第4 ...
- BFS-八数码问题与状态图搜索
在一个3*3的棋盘上放置编号为1~8的八个方块,每个占一格,另外还有一个空格.与空格相邻的数字方块可以移动到空格里.任务1:指定的初始棋局和目标棋局,计算出最少的移动步数:任务2:数出数码的移动序列. ...
- idea 配置 tomcat 教程
最近在搞一个项目需要用到idea 配置tomcat,翻了翻网上的帖子发现稂莠不齐,最后决定还是自己写个吧!(其实我挺蠢的走了好多的弯路,哎~) 1.首先准备一个需要大家tomcat的工程,然后使用id ...
- 打开UML类图的正确姿势
UML(Unified Modeling Language) 统一建模语言,又称标准建模语言.是用来对软件密集系统进行可视化建模的一种语言.UML的定义包括UML语义和UML表示法两个元素.UML是在 ...
- vue学习指南:第十四篇(详细) - Vue的 路由 第四篇 ( 路由的导航守卫 )
导航守卫 一.全局导航守卫 1. 全局导航守卫,把方法给 router,只要路由发生改变跳转都会触发这个函数 2. 每个路由 都有一个 meta 3. 全局导航守卫分两种: 1. 全局前置导航守卫:路 ...
- mybatis(五):源码分析 - mapper文件加载流程
- Java类、方法、属性等
java是面向对象的编程语言 Object,就是指面向对象的对象,对象就是类的具体实例. 在java里,对象是类的一个具体实例.就像:人,指一个类.张三.李四.王五等则是一个个具体的实例,也就是jav ...
- 《深入理解Java虚拟机》读书笔记六
第七章 虚拟机类加载机制 1.类加载的时机 虚拟机的类加载机制: 虚拟机把描述类的数据从class文件中加载到内存,并对数据进行校验.转换解析和初始化,最终形成了可以被虚拟机直接使用的Java类型,这 ...