C# 如何将子项放在Listview中特定列旁边的列中?

C# 如何将子项放在Listview中特定列旁边的列中?,c#,winforms,listview,timer,C#,Winforms,Listview,Timer,我对C#很陌生,想尝试一些问题。我创建了一个ListView来存储两个随机数的操作,所有这些操作都是在一定时间内发生的 下面是我如何构建列表视图的方法: 第一列称为“开始时间”,记录计时器开始的时间。第二列的作用相同,但用于“结束时间”。现在当它运行时,列表视图将以编程方式创建多个列来存储操作结果。 但是,当程序运行时,结果将跳转到保留用于记录“结束时间”的第二列中。 如何确保第二列在计时器结束前为空,并且结果将从第三列开始一直输入到最后? 代码如下: static int k = 10; Li

我对C#很陌生,想尝试一些问题。我创建了一个
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),您可以将这些结果合并到
我是否正确地假设,结果都从您希望它们开始的位置向左移动了一列?他们不是从第三列开始,而是从第二列开始,但其他所有内容都按预期工作?是的,其他所有内容都工作。我需要我的结果从第三列开始