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#实现,下载地址: 画树叶小程序下载 核心 ...
随机推荐
- Dubbo-服务注册中心之AbstractRegistry
在dubbo中,关于注册中心Registry的有关实现封装在了dubbo-registry模块中.提供者(Provider)个消费者(Consumer)都是通过注册中心进行资源的调度.当服务启动时,p ...
- ubuntu 16.04.1上安装并使用vsftpd
1.安装vsftpd软件 sudo apt-get install vsftpd 2.新建文件 sudo vim /etc/vsftpd.user_list 用于记录用户名 3. 修改sudo vim ...
- 手把手带你开发一款 IIS 模块后门
https://cloud.tencent.com/developer/article/1507913 首先准备工具 VS2017 IIS 开始开发 先打开 VS 创建一个 winfrom 项目然后添 ...
- maven通过pom文件下载相关依赖包的网址
下载有关依赖插件的网址去MVNREPOSITORY仓库寻找对应的版本然后添加到pom文件中就可以自动下载了 网址为:https://mvnrepository.com
- TODO:rds数据库实例
rds数据库实例怎么创建的 rds数据库实例高可用是怎么实现的 rds备份是怎么实现的 参考: https://www.cnblogs.com/jackyzzy/p/7384355.html http ...
- 记录 shell学习过程(10 ) shell 对文件的操作
0.sed 常用内部命令 a 在匹配后面添加 i 在匹配前面添加 p 打印 d 删除 s 查找替换 c 更改 y 转换 N D P 下面用a来演示 1.sed 'a 追加内容' 文件 # sed 'a ...
- Linux环境下C语言线程创建---简单代码
在Linux环境下用C语言编写线程创建. //file name: pthreadtext.c #include <stdio.h> #include <pthread.h> ...
- Mac下Charles的安装和配置
一.安装与破解 官网下载,破解方法参考其他,此处略 二.配置 1.电脑端安装 Charles 的根证书 注意:此时钥匙串默认为不信任,需设置为始终信任 2.配置代理:勾选enable transpre ...
- 363. 矩形区域不超过 K 的最大数值和(利用前缀和转化为最大子序和问题)
题目: 链接:https://leetcode-cn.com/problems/max-sum-of-rectangle-no-larger-than-k/ 给定一个非空二维矩阵 matrix 和一个 ...
- Spring学习(六)
AOP和OOP 1.OOP:Object-Oriented Programming,面向对象程序设计,是静态的,一旦类写死了就不能改变了,要更改就得修改代码重新编译,父类类型引用指向对象来实现动态性. ...