【发布时间】:2019-07-08 04:46:28
【问题描述】:
我对 C# 很陌生,想尝试一些问题。我创建了一个ListView 来存储两个随机数的操作,所有这些操作都发生在一定的时间内。
这是我构建ListView的方法:
第一列称为“开始时间”,用于记录计时器开始的时间。第二列的作用相同,但为“结束时间”。现在,当它运行时,Listview 将以编程方式创建多个列来存储操作结果。
但是,当程序运行时,结果会跳转到保留用于记录“结束时间”的第二列。
如何确保在计时器结束之前第二列是空的并且结果会从第三列开始放到最后吗?
代码如下:
static int k = 10;
ListViewItem lvi1 = new ListViewItem();
private void Bstart_Click(object sender, EventArgs e)
{
timer1.Start();
lvi1 = new ListViewItem(DateTime.Now.ToString("HH:mm:ss"));
listView2.Items.Add(lvi1);
}
private void Timer1_Tick(object sender, EventArgs e)
{
Random ran1 = new Random();
Random ran2 = new Random();
double nu1 = ran1.Next(0, 100);
double nu2 = ran2.Next(2, 270);
string op;
var operation = ran1.Next(1, 5);
double res;
if (k > 1)
{
label1.Text = k.ToString() + " seconds remaining";
}
else if (k == 1)
{
label1.Text = k.ToString() + " seconds remaining";
}
else
{
timer1.Stop();
lvi1.SubItems[1].Text = DateTime.Now.ToString("HH:mm:ss");
label1.Text = "You have 10 seconds";
//MessageBox.Show("You are out of time!", "Too Bad", MessageBoxButtons.OKCancel, MessageBoxIcon.Exclamation);
k = 10;
}
k--;
switch (operation)
{
case 1:
res = nu1 + nu2;
op = "+";
break;
case 2:
res = nu1 - nu2;
op = "-";
break;
case 3:
res = nu1 * nu2;
op = "*";
break;
case 4:
res = nu1 / nu2;
op = "/";
break;
default:
res = 0;
op = "?";
break;
}
textBox1.Text = Convert.ToString(nu1 + " " + op + " " + nu2 + " = " + res);
listView2.Columns.Add("OP", 45, HorizontalAlignment.Center);
lvi1.SubItems.Add(res.ToString());
}
private void Bstop_Click(object sender, EventArgs e)
{
timer1.Stop();
}
【问题讨论】:
-
您的
if(k > 1)和else if (k == 1)的内容完全相同。您可以将它们合并到if (k >= 1) -
我是否正确地假设结果都从您希望它们开始的位置向左移动了一列?他们不是从第三列开始,而是从第二列开始,但其他一切都按预期工作?
-
是的,其他一切正常。我需要我的结果从第三列开始
标签: c# winforms listview timer