C#记录两次点击之间所花费的时间
本文关键字:之间 时间 记录 两次 | 更新日期: 2023-09-27 18:27:10
我在C#中有一段代码,应该在运行时记录时间和鼠标光标坐标。我希望它在单击正方形(nextTaskBttn_Click)和圆形之间花费时间。(TestForm_MouseClick)所以我希望它记录时间,然后减去以获得两次点击之间的时间。我不确定做这件事的最佳或正确方法是什么。有人有什么建议吗?
这是代码:
namespace FittsLawExperiment
{
public partial class TestForm : Form
{
private Random r = new Random();
private int Count = 0;
private String fileData = String.Empty;
private List<SizeDistanceDirectionClass> myList = new List<SizeDistanceDirectionClass>();
Point globalPoint = new Point();
int globalDiameter = 0;
//int globalPointX = 0; test
//int globalPointY = 0;
public TestForm()
{
InitializeComponent();
FormBorderStyle = FormBorderStyle.None;
WindowState = FormWindowState.Normal;//change to Maximize
//variables for size, distance and direction
int s1 = 30;
int s2 = 50;
int s3 = 70;
int d1 = 50;
int d2 = 100;
int l = 0;
int r = 1;
//set into groups of three into temps
SizeDistanceDirectionClass temp1 = new SizeDistanceDirectionClass(s1, d1, l);
SizeDistanceDirectionClass temp2 = new SizeDistanceDirectionClass(s2, d1, l);
SizeDistanceDirectionClass temp3 = new SizeDistanceDirectionClass(s3, d1, l);
SizeDistanceDirectionClass temp4 = new SizeDistanceDirectionClass(s1, d2, l);
SizeDistanceDirectionClass temp5 = new SizeDistanceDirectionClass(s2, d2, l);
SizeDistanceDirectionClass temp6 = new SizeDistanceDirectionClass(s3, d2, l);
SizeDistanceDirectionClass temp7 = new SizeDistanceDirectionClass(s1, d1, r);
SizeDistanceDirectionClass temp8 = new SizeDistanceDirectionClass(s2, d1, r);
SizeDistanceDirectionClass temp9 = new SizeDistanceDirectionClass(s3, d1, r);
SizeDistanceDirectionClass temp10 = new SizeDistanceDirectionClass(s1, d2, r);
SizeDistanceDirectionClass temp11 = new SizeDistanceDirectionClass(s2, d2, r);
SizeDistanceDirectionClass temp12 = new SizeDistanceDirectionClass(s3, d2, r);
myList.Add(temp1);//added to myList
myList.Add(temp2);
myList.Add(temp3);
myList.Add(temp4);
myList.Add(temp5);
myList.Add(temp6);
myList.Add(temp7);
myList.Add(temp8);
myList.Add(temp9);
myList.Add(temp10);
myList.Add(temp11);
myList.Add(temp12);
}
/// <summary>
/// To Draw Circle
/// </summary>
private void DrawCircle(Point position, int diameter)
{
globalPoint = position;
//globalPointX = position.X; test
//globalPointY = position.Y;
globalDiameter = diameter;
System.Drawing.Graphics graphics = this.CreateGraphics();
System.Drawing.Rectangle rectangle = new System.Drawing.Rectangle(position.X, position.Y, diameter, diameter);
graphics.FillEllipse(Brushes.Blue, rectangle);
}
/// <summary>
/// To Draw A circle for a task
/// This button needs to clicked on to generate each circle
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void nextTaskBttn_Click(object sender, EventArgs e)
{
//int display = Count + 1;
//label1.Text = "Times clicked: " + display.ToString();
nextTaskBttn.Visible = false;
int groupIndex = r.Next(12);
while (myList[groupIndex].Count == 10)
{
groupIndex = r.Next(12);
}
//Get the button location
Point buttonLoc = nextTaskBttn.Location;
if (myList[groupIndex].Direction == 1) //If r = 0 -> left
{
DrawCircle(new Point(buttonLoc.X - myList[groupIndex].Distance, buttonLoc.Y), myList[groupIndex].Size);//right
}
else
{
DrawCircle(new Point(buttonLoc.X + myList[groupIndex].Distance, buttonLoc.Y), myList[groupIndex].Size);//left
}
myList[groupIndex].Count++;
//Listen to clicks in Form
//MouseClick += TestForm_MouseClick;
nextTaskBttn.Visible = false;
//DateTime dt1 = DateTime.Now.ToString("h:mm:ss");//trying to record one time here
recordClick();
}
void TestForm_MouseClick(object sender, MouseEventArgs e)
{
if (Validateposition())
{
//Hide circles
this.Invalidate();
//Show nextTask Button
nextTaskBttn.Visible = true;
//String circleTime = DateTime.Now.ToString("h:mm:ss");//I'm trying to record one time here
recordClick();
int display = Count + 1;
label1.Text = "Times clicked: " + display.ToString();
Count++;
if (Count == 120)
{
nextTaskBttn.Visible = false;
MessageBox.Show("You have completed the test. Thank you!");
//this.Close();
}
}
}
private Boolean Validateposition()// if Cursor.Position > globalPoint + globalDiameter/2
{
//if (Cursor.Position > globalPoint + (globalDiameter / 2))
//{
// return false;
//}
return true;
}
private void recordClick()
{
//TimeSpan span = circleTime - boxTime; //I want to get the time between clicks. Not sure a good way to do this.
String currentTime = DateTime.Now.ToString("h:mm:ss tt");
String currentPosition = Cursor.Position.ToString();
fileData = fileData + currentPosition + " " + currentTime + Environment.NewLine;
}
在.NET中,已经有一个专门用于此的类:StopWatch
。