Как поместить подэлементы в столбцы рядом с определенным столбцом в Listview? - PullRequest
0 голосов
/ 08 июля 2019

Я очень новичок в 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();
}

1 Ответ

0 голосов
/ 08 июля 2019

Вы можете добавить элемент-заполнитель, чтобы заполнить второй столбец string.Empty или -, пока вы не захотите его заполнить:

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();
    // ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...