110,565
社区成员
发帖
与我相关
我的任务
分享
using System;
using System.Text.RegularExpressions;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace 指法
{
public partial class Form1 : Form
{
public class sLabel : Label
{
public sLabel()
{
this.Font = new Font("Courier New", 15);
this.Anchor = AnchorStyles.Left | AnchorStyles.Right;
this.Visible = false;
this.AutoSize = true;
this.Height = 27;
this.BorderStyle = BorderStyle.None;
}
}
public class sRichtextbox : RichTextBox
{
public sRichtextbox()
{
this.Font = new Font("Courier New", 15);
this.Height = 27;
this.ForeColor = Color.Black;
this.Anchor = AnchorStyles.Left | AnchorStyles.Right;
this.Visible = false;
this.ScrollBars = RichTextBoxScrollBars.None;
}
}
public Form1()
{
InitializeComponent();
this.MinimumSize = new Size(597, 405);
this.StartPosition = FormStartPosition.CenterScreen;
}
List<Label> lstLable = new List<Label>();
List<RichTextBox> lstRichTextBox = new List<RichTextBox>();
int NowWorldLengt = 0;
private void Form1_Resize(object sender, EventArgs e)
{
int intWidth = this.ClientSize.Width;
bool bVisible = false;
for (int i = 0; i < 30; i++)
{
int y = i * 55 +70; //27为toolstrip高度
if (y + 5 > this.ClientSize.Height)
{
ShowRichtextboxCount = i;
bVisible = false;
}
else
bVisible = true;
lstLable[i].Location = new Point(0, y-45);
lstLable[i].Width = intWidth;
lstLable[i].Visible = bVisible;
lstRichTextBox[i].Location = new Point(0,y-22);
lstRichTextBox[i].Width = intWidth;
lstRichTextBox[i].Visible = bVisible;
}
switch (iCharacter)
{
case 1:
a_z(null, null);
break;
case 2:
A_z(null, null);
break;
case 3:
A_z_Num(null, null);
break;
}
}
Timer timer = new Timer(); //计时器
ToolStripLabel tsLSpeed = new ToolStripLabel();
int iCharacter = 0;
private void Form1_Load(object sender, EventArgs e)
{
for (int i = 0; i < 30; i++)
{
sLabel a = new sLabel();
sRichtextbox b = new sRichtextbox();
lstLable.Add(a);
lstRichTextBox.Add(b);
this.Controls.Add(a);
this.Controls.Add(b);
b.Tag = i;
b.TextChanged += inputboxTextChange;
b.SelectionChanged += inputboxSelectionChange;
b.KeyDown += inputboxKeyDown;
b.GotFocus += inputFocus;
}
ToolStrip ts = new ToolStrip();
ToolStripButton tb1;
tb1=AddNewTsB("纯小写字母训练", ref ts);
tb1.Click += a_z;
tb1 = AddNewTsB("大小写字母训练", ref ts);
tb1.Click += A_z;
tb1 = AddNewTsB("字母及数字训练", ref ts);
tb1.Click += A_z_Num;
ToolStripSeparator tss1 = new ToolStripSeparator();
ts.Items.Add(tss1);
AddNewTsB("当前速度", ref ts);
ts.Items.Add(tsLSpeed);
this.Controls.Add(ts);
timer.Interval = 1000;
timer.Tick += CountTime;
Form1_Resize(null,null);
}
ToolStripButton AddNewTsB(string strText,ref ToolStrip ts)
{
ToolStripButton tb1=new ToolStripButton();
tb1.Text = strText;
tb1.DisplayStyle = ToolStripItemDisplayStyle.Text;
ts.Items.Add(tb1);
return tb1;
}
int RightKey = 0; //正确字符数量
int WrongKey = 0; //错误字符数量
int ElapseTime = 0;//使用时间数量(秒)
void a_z(object sender, EventArgs e)
{
getText('a', 'z');
iCharacter = 1;
}
void A_z(object sender, EventArgs e)
{
getText('A', 'z');
iCharacter = 2;
}
void A_z_Num(object sender, EventArgs e)
{
getText('0', 'z');
iCharacter = 3;
}
void getText(int miniValue, int maxValue)
{
//计算当前看得到的字符
NowWorldLengt = (this.ClientSize.Width - 10) / 12;
ElapseTime = 0;
RightKey = 0;
WrongKey = 0;
timer.Enabled = true;
int iTextLength = 0;
Random rd = new Random(Guid.NewGuid().GetHashCode());
Regex reg = new Regex(@"(\d|\w)");
Regex reg2 = new Regex(@"\w");
for (int l1 = 0; l1 < 30; l1++)
{
StringBuilder sb = new StringBuilder();
while (iTextLength < NowWorldLengt)
{
char c = (char)rd.Next(miniValue, maxValue);
if (miniValue == '0')
{
if (reg.Match(c.ToString()).Success && c!='_')
{
sb.Append(c);
iTextLength++;
Application.DoEvents();
}
}
else
{
if (reg2.Match(c.ToString()).Success && c != '_')
{
sb.Append(c);
iTextLength++;
}
}
}
iTextLength = 0;
lstLable[l1].Text = sb.ToString();
lstRichTextBox[l1].Clear();
}
lstRichTextBox[0].Focus();
}
void CountTime(object sender, EventArgs e)
{
ElapseTime++;
tsLSpeed.Text = "正确:" + RightKey.ToString() + " 错误:" + WrongKey.ToString() + " 费时:" + ElapseTime.ToString()+" 速度:" +(RightKey*60/ElapseTime).ToString()+"/分钟";
}
int NowIndex = -1; //当前正在输入的richtextbox
void inputFocus(object sender, EventArgs e)
{
RichTextBox b=(RichTextBox) sender;
NowIndex = (int)b.Tag;
}
void inputboxKeyDown(object sender, KeyEventArgs e)
{
if (e.Control || e.KeyValue==16)
return;
RichTextBox rb=(RichTextBox) sender;
int iDiff = 32;
if (Control.IsKeyLocked(Keys.CapsLock) && e.Shift)
iDiff *= -1;
else
{
if (e.Shift || Control.IsKeyLocked(Keys.CapsLock))
iDiff = 0;
}
if (e.KeyValue + iDiff == lstLable[NowIndex].Text[rb.SelectionStart])
{
rb.SelectionColor = Color.Black;
RightKey++;
}
else
{
rb.SelectionColor = Color.Red;
WrongKey++;
}
}