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#实现,下载地址: 画树叶小程序下载 核心 ...
随机推荐
- 你不知道的JavaScript下卷
阿喀琉斯之踵 学习编程最好的办法就是编写代码 比较 隐式类型转换 数字和字符串 比较 字符串会隐式转换为数字,再进行比较 == 类型转换 ecma
- Nginx 配置Websocket
Nginx反向代理配置websocket nginx.org 官网推荐如下的配置,也可以直接看官网:http://nginx.org/en/docs/http/websocket.html http ...
- Vue中封装axios
参考: https://www.jianshu.com/p/7a9fbcbb1114 https://www.cnblogs.com/dreamcc/p/10752604.html 一.安装axios ...
- [SDOI2012] Longge的问题 - 欧拉函数
求 \(\sum\limits_{i=1}^{n}gcd(i,n)\) Solution 化简为 \(\sum\limits_{i|n}^{n}φ(\dfrac{n}{i})i\) 筛出欧拉函数暴力求 ...
- bootstrap之表格自适应 table-responsive
<div class=table-responsive"> <table class="table"> <thead> <tr& ...
- Python里的Flask开发环境的搭建
在已经安装好了Python后,我这里用的是Python3.5,准备进一步学习Flask框架,下面记录搭建Flask环境 这里使用了虚拟环境,在虚拟环境里,最小化的安装Flask. 参考步骤: 1.首先 ...
- yolo系列阅读笔记(v1-v3)
yolov1 模型输出的概率建模 图片首先被分割为S*S的网格(grid cell).如果一个bbox的中心落在一个网格里,则该网格负责检测该物体.(对于pascal数据集,S定为7) 每个网格预测B ...
- arm-linux下qt + opencv开发环境的搭建(Altera DE1 Soc)
arm-linux-gnueabihf-gcc下载 qt下载 arm-linux下qt + opencv开发环境的搭建(Altera DE1 Soc) Ubuntu 16.04 安装QT arm嵌入式 ...
- R Tidyverse dplyr包学习笔记2
Tidyverse 学习笔记 1.gapminder 我理解的gapminder应该是一个内置的数据集 加载之后使用 > # Load the gapminder package > li ...
- selenium 模拟滑动解锁
来源:Selenium模拟JQuery滑动解锁 (selenium +Python ) 本文:selenium+Java package cn.gloryroad; import org.open ...