Создание списка списков в c# - PullRequest
0 голосов
/ 29 апреля 2020

Я делаю приложение интервального таймера в Visual Studio. Я использую wpf и c#. У меня есть одна сетка, в которой я создаю секундомер. Дело в том, что у меня есть кнопка старт / пауза и кнопка круг / сброс. Когда работает секундомер, у меня есть кнопка круга, которая является моей главной проблемой для этой темы. Поэтому я создал, что кнопка круга создает новый текстовый блок в сетке, который должен показывать время последнего круга. Добавление текстового блока работает, но я не могу получить это время круга. Я пытаюсь использовать список списков, но получаю много ошибок. Я понимаю логику c этого, но я не очень хорошо знаком с c#. Я выучил python и javascript раньше, и это немного по-другому

            static string NewLap(int NewMinutes, int NewSeconds, int NewMilliseconds)
            {
            var NewLapTime = String.Format("{0:00}:{1:00}:{2:00}",
            NewMinutes, NewSeconds, NewMilliseconds);
            return NewLapTime;
            }
            int NewMinutes = 0;
            int NewSeconds = 0;
            int NewMilliseconds = 0;
            List<List<int>> RecordedTimes = new List<List<int>>();
            RecordedTimes.Add(new List<int> {0, 0, 0});/// This line causes error. 
            ///If I could somehow make it to work I think the code would work
            public void ResetOrLap_Click(object sender, RoutedEventArgs e)
            {

             if (Clicker % 2 == 0)
                 {
                 Stopwatch.Text = "00:00:00";
                 dt.Stop();
                 dt.Equals(0);
                 sw.Reset();
                 LapListing.Children.Clear();
                 RecordedTimes.Add(new List<int> {0, 0, 0});
                 }
            else
                 {
                 var newTextBlock = new TextBlock();
                 var newSeparator = new Separator();
                 TimeSpan ts = sw.Elapsed;
                 NewMinutes = ts.Minutes - RecordedTimes[RecordedTimes.Count - 1][0];
                 NewSeconds = ts.Seconds - RecordedTimes[RecordedTimes.Count - 1][1];
                 NewMilliseconds = ts.Milliseconds / 10 - RecordedTimes[RecordedTimes.Count - 1][2];
                 newTextBlock.Text = NewLap(NewMinutes, NewSeconds, NewMilliseconds);
                 newTextBlock.FontSize = 20;
                 newSeparator.Width = 550;
                 LapListing.Children.Add(newTextBlock);
                 LapListing.Children.Add(newSeparator);
                 RecordedTimes.Add(new List<int> { ts.Minutes, ts.Seconds, ts.Milliseconds });
                 }
            }

Если такой команды RecordedTimes.Add не было (новый список {0, 0, 0}); мой код работает нормально, но я не получаю желаемого результата. Потому что я хочу получить последнее записанное время круга.

Так, например, если первый круг длится 10 секунд, а второй круг длится 8 секунд. Текущее время на секундомере (общее время) составит 18 секунд. Я хочу, чтобы он печатал в строке 10 секунд, а во втором ряду 9 секунд и так далее. Мне просто нужно добавить один список нулей, и я думаю, что это будет работать, но я не могу это сделать. Буду признателен за любую помощь, надеюсь, я вас не слишком смутил.

1 Ответ

0 голосов
/ 29 апреля 2020

Я решил это, поместив RecordedTimes.Add (новый список {0, 0, 0}); до кнопки «Пуск», поэтому каждый раз, когда я запускаю свой секундомер, у него будет список из 3 нулей, которые мне нужны для работы этого алгоритма

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