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#实现,下载地址: 画树叶小程序下载 核心 ...
随机推荐
- asp.net web core 开发问题汇总(1)
1 ASP.NET Core 设置默认静态起始页 转载地址:ASP.NET Core 设置默认起始页(如default.html) 注:1 默认情况下ASP.NET Core应用程序时不支持静态 ...
- MySQL的DML语言(增删改)
MySQL的DML语言(增删改) 补充说明,外键:不要使用外键,一切外键概念都在应用层解决. 补充说明,数据库的列,也就是字段名,尽量带上飘符号` 数据库存在的意义:数据存储和数据管理. 数据库:行( ...
- [HAOI2011] Problem b - 莫比乌斯反演
复习一下莫比乌斯反演 首先很显然用一下容斥把它转化成求 \(ans=\sum_{i=1}^a \sum_{j=1}^b [{gcd(i,j)=d}]\) 我们可以定义 f(d) 和 F(d) 如下: ...
- mybatis一级缓存和二级缓存(一)
一级缓存: 就是Session级别的缓存.一个Session做了一个查询操作,它会把这个操作的结果放在一级缓存中. 如果短时间内这个session(一定要同一个session)又做了同一个操作,那么h ...
- PP: Shape and time distortion loss for training deep time series forecasting models
Problem: time series forecasting Challenge: forecasting for non-stationary signals and multiple futu ...
- angular2 给下拉框动态赋值
html页中 其中aab是从后台获取的动态数据
- vue formatter element表格处理数据
formatter 指定一个vue methods 方法 作用:对从数据库中取出的数据进行处理后展示. <el-table-column prop="partner1" // ...
- linux - mysql - 卸载:RPM包安装方式的MySQL卸载
(1)检查是否安装了MySQL组件 [root@DB-Server init.d]# rpm -qa | grep -i mysql MySQL-devel-5.6.23-1.linux_glibc2 ...
- SpringBoot 测试基类
每次写单元测试都要重复写一些方法.注解等,这里我写了一下测试的基类 (1) 记录测试方法运行的时间 (2)两个父类方法 print,可打印list和object对象 (3)一个属性 logger 记录 ...
- JUC-分支合并框架
一.原理 Fork:把一个复杂任务进行分拆,大事化小 Join:把分拆任务的结果进行合并 ForkJoinPool 分支合并池 类比=> 线程池 ForkJoinTask ForkJo ...