C# 如何将子项放在Listview中特定列旁边的列中?
我对C#很陌生,想尝试一些问题。我创建了一个C# 如何将子项放在Listview中特定列旁边的列中?,c#,winforms,listview,timer,C#,Winforms,Listview,Timer,我对C#很陌生,想尝试一些问题。我创建了一个ListView来存储两个随机数的操作,所有这些操作都是在一定时间内发生的 下面是我如何构建列表视图的方法: 第一列称为“开始时间”,记录计时器开始的时间。第二列的作用相同,但用于“结束时间”。现在当它运行时,列表视图将以编程方式创建多个列来存储操作结果。 但是,当程序运行时,结果将跳转到保留用于记录“结束时间”的第二列中。 如何确保第二列在计时器结束前为空,并且结果将从第三列开始一直输入到最后? 代码如下: static int k = 10; Li
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();
}
您可以添加占位符项,用字符串填充第二列。在实际填充之前,请清空或-
:
private void Bstart_Click(object sender, EventArgs e)
{
timer1.Start();
lvi1 = new ListViewItem(DateTime.Now.ToString("HH:mm:ss"));
listView2.Items.Add(lvi1);
// Add an empty SubItem or any placeholder here:
// lvi1.SubItems.Add(string.Empty);
lvi1.SubItems.Add("-");
}
正如我在评论中已经提到的,您的if(k>1)
和else if(k==1)
具有完全相同的内容。您可以合并以下内容:
if (k >= 1)
{
label1.Text = k.ToString() + " seconds remaining";
}
else
{
timer1.Stop();
// ...
您的if(k>1)
和else if(k==1)
具有完全相同的内容。如果(k>=1),您可以将这些结果合并到,
我是否正确地假设,结果都从您希望它们开始的位置向左移动了一列?他们不是从第三列开始,而是从第二列开始,但其他所有内容都按预期工作?是的,其他所有内容都工作。我需要我的结果从第三列开始