C# winfrom 使用数组实现验证码功能
思路部分
具体思路与上期一样,不过方法有不同点(多处优化)
(上期链接)
难点介绍
上期已经讲过部分难点,这期将讲解新的难点
难点一:使用数组依次赋值随机验证码
先声明数组,接着遍历赋值
Random Ra = new Random();
string[] str = new string[4];
//依次给str数组赋值
for (int i = 0; i < str.Length; i++)
{
int j = Ra.Next(0, 3);
if (j == 1)
{
str[i] = ((char)Ra.Next(97, 123)).ToString();//小写字母
}
else if (j == 2)
{
str[i] = ((char)Ra.Next(65, 91)).ToString();//大写字母
}
else
{
str[i] = Ra.Next(0, 10).ToString();//数字
}
}
难点二:label接受随机验证码
这里使用foreach遍历,避免了代码冗余
int n = 0;
foreach (Control item in this.Controls)
{
if (item is Label)
{
var comm = item as Label;
comm.Text = str[n];
n++;
}
}
难点三:颜色随机
其实不难
label1.ForeColor = Color.FromArgb(Ra.Next(0, 255), Ra.Next(0, 255), Ra.Next(0, 255));
label2.ForeColor = Color.FromArgb(Ra.Next(0, 255), Ra.Next(0, 255), Ra.Next(0, 255));
label3.ForeColor = Color.FromArgb(Ra.Next(0, 255), Ra.Next(0, 255), Ra.Next(0, 255));
label4.ForeColor = Color.FromArgb(Ra.Next(0, 255), Ra.Next(0, 255), Ra.Next(0, 255));
这里也可以使用遍历的方法,不过比较晦涩,为了使读者比较清楚的理解
难点四:字体大小|粗体|斜体
这才是难点!
//大小随机|斜体随机|粗体随机
int d = Ra.Next(0, 4);
if (d == 1)
{
label1.Font = new Font("", Ra.Next(11, 24), FontStyle.Italic | FontStyle.Bold);
//大小随机|斜体|粗体
}
else if (d == 2)
{
label1.Font = new Font("", Ra.Next(11, 24), FontStyle.Italic);
//大小随机|斜体
}
else
{
label1.Font = new Font("", Ra.Next(11, 24));
//大小随机
}
int a = Ra.Next(0, 4);
if (a == 1)
{
label2.Font = new Font("", Ra.Next(11, 24), FontStyle.Italic & FontStyle.Bold);
}
else if (a == 2)
{
label2.Font = new Font("", Ra.Next(11, 24), FontStyle.Italic);
}
else
{
label2.Font = new Font("", Ra.Next(11, 24));
}
int b = Ra.Next(0, 4);
if (b == 1)
{
label3.Font = new Font("", Ra.Next(11, 24), FontStyle.Italic & FontStyle.Bold);
}
else if (b == 2)
{
label3.Font = new Font("", Ra.Next(11, 24), FontStyle.Italic);
}
else
{
label3.Font = new Font("", Ra.Next(11, 24));
}
int c = Ra.Next(0, 4);
if (c == 1)
{
label4.Font = new Font("", Ra.Next(11, 24), FontStyle.Italic & FontStyle.Bold);
}
else if (c == 2)
{
label4.Font = new Font("", Ra.Next(11, 24), FontStyle.Italic);
}
else
{
label4.Font = new Font("", Ra.Next(11, 24));
}
}
这里也是可以是用foreach方法的,不过这只是一个简单(最蠢)的思路。
以上