Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 20.06.2021
Сообщений: 19

Не работает обновление времени на таймере

14.04.2024, 18:08. Показов 350. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
У меня есть три формы. На первой форме расположены 5 кнопок, на второй форме радиобатоны с текстбоксами, на третей таймер с лейблом для отображения времени. На первой форме кнопка button1 запускает таймер, а кнопка button3 переключает радиобатоны напротив которых имеются текстбоксы в которые вписывается время, так вот при нажатии на button3 радиокнопки переключается но время на таймере не обновляется.

Код формы FormControls
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
public partial class FormControls : Form
 {
     private FormTimer formtimer; // Переменная для хранения ссылки на FormTimer
     private FormRadioTextBox formradio; // Переменная для хранения ссылки на FormRadioTextBox
     public FormControls(FormTimer timer, FormRadioTextBox radio)
     {
         InitializeComponent();
         formtimer = timer; // Присваиваем переданный экземпляр FormTimer
         formradio = radio; // Присваиваем переданный экземпляр FormRadioTextBox
     }
 
 
 
     private void button1_Click(object sender, EventArgs e)
     {
         // Запускаем таймер
         formtimer.StartTimer();
     }
 
     private void button2_Click(object sender, EventArgs e)
     {
         // Останавливаем таймер
         formtimer.StopTimer();
     }
 
     private void button3_Click(object sender, EventArgs e)
     {
         formradio.SwitchToNextRadioButton();
     }
 
     private void button4_Click(object sender, EventArgs e)
     {
         formtimer.Show();
     }
 
     private void button5_Click(object sender, EventArgs e)
     {
         formradio.Show();
     }
 }
Код формы FormRadioTextBox

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
namespace pomogite
{
    public partial class FormRadioTextBox : Form
    {
        FormTimer formtimer; // Объявляем переменную, но не создаем объект здесь
 
        private int currentRadioButtonIndex = 0;
        public FormRadioTextBox()
        {
            InitializeComponent();
            LoadSavedTime(); // Загрузка сохраненного времени при запуске программы
            this.FormClosing += new FormClosingEventHandler(FormRadioTextBox_FormClosing); // Добавляем обработчик события закрытия формы
 
            // Создаем объект FormTimer, передавая в конструктор экземпляр FormRadioTextBox
            formtimer = new FormTimer(this);
        }
        public void SwitchToNextRadioButton()
        {
            // Сохраняем суммарное время предыдущих текстбоксов перед переключением
            formtimer.previousTotalSeconds += formtimer.totalSeconds;
 
            currentRadioButtonIndex++;
            if (currentRadioButtonIndex >= 8)
            {
                currentRadioButtonIndex = 0;
            }
 
            // Устанавливаем новый активный RadioButton
            switch (currentRadioButtonIndex)
            {
                case 0:
                    radioButton1.Checked = true;
                    break;
                case 1:
                    radioButton2.Checked = true;
                    break;
                case 2:
                    radioButton3.Checked = true;
                    break;
                case 3:
                    radioButton4.Checked = true;
                    break;
                case 4:
                    radioButton5.Checked = true;
                    break;
                case 5:
                    radioButton6.Checked = true;
                    break;
                case 6:
                    radioButton7.Checked = true;
                    break;
                case 7:
                    radioButton8.Checked = true;
                    break;
            }
 
            // Сбрасываем текущее время и запускаем таймер
            formtimer.totalSeconds = 0;
            formtimer.StartTimer();
 
            // Обновляем отображение времени
            formtimer.UpdateTimerDisplay();
        }
 
 
 
        public TextBox GetCurrentTextBox()
        {
            // Возвращает TextBox, соответствующий текущему RadioButton
            return GetTextBoxByIndex(currentRadioButtonIndex);
        }
        private TextBox GetTextBoxByIndex(int index)
        {
            // Возвращает TextBox по индексу
            switch (index)
            {
                case 0:
                    return textBox1;
                case 1:
                    return textBox2;
                case 2:
                    return textBox3;
                case 3:
                    return textBox4;
                case 4:
                    return textBox5;
                case 5:
                    return textBox6;
                case 6:
                    return textBox7;
                case 7:
                    return textBox8;
                default:
                    return null;
            }
        }
 
        private void FormRadioTextBox_FormClosing(object sender, FormClosingEventArgs e)
        {
            SaveCurrentTime(); // Сохранение текущего времени при закрытии программы
        }
        private void LoadSavedTime()
        {
            // Загрузка сохраненного времени из файла и установка соответствующих значений текстбоксов
            try
            {
                using (StreamReader reader = new StreamReader("saved_time.txt"))
                {
                    for (int i = 0; i < 8; i++)
                    {
                        string line = reader.ReadLine();
                        if (line != null)
                        {
                            GetTextBoxByIndex(i).Text = line;
                        }
                    }
                }
            }
            catch (FileNotFoundException)
            {
                // Файл не найден, ничего не делаем
            }
        }
 
        private void SaveCurrentTime()
        {
            // Сохранение текущего времени в файл
            using (StreamWriter writer = new StreamWriter("saved_time.txt"))
            {
                for (int i = 0; i < 8; i++)
                {
                    writer.WriteLine(GetTextBoxByIndex(i).Text);
                }
            }
        }
    }
}
Код формы FormTimer


C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
namespace pomogite
{
    public partial class FormTimer : Form
    {
        private FormRadioTextBox formradio; // Переменная для хранения ссылки на FormRadioTextBox
        public uint totalSeconds = 0;
        public uint previousTotalSeconds = 0; // Для хранения суммарного времени предыдущих текстбоксов
 
        public FormTimer(FormRadioTextBox radio)
        {
            InitializeComponent();
            InitializeTimer();
            formradio = radio; // Присваиваем переданный экземпляр FormRadioTextBox
 
        }
 
        private void InitializeTimer()
        {
            timer1.Interval = 10; // Интервал в миллисекундах (1 секунда)
            timer1.Tick += timer1_Tick;
        }
 
        public void StartTimer()
        {
            timer1.Start();
        }
 
        public void StopTimer()
        {
            // Остановка таймера
            timer1.Stop();
        }
 
        private void timer1_Tick(object sender, EventArgs e)
        {
            // Увеличиваем общее время на одну секунду
            totalSeconds++;
 
            // Если достигнуто введенное значение в текущем текстбоксе, останавливаем таймер
            if (totalSeconds >= int.Parse(formradio.GetCurrentTextBox().Text) * 60)
            {
                timer1.Stop();
            }
 
            // Обновляем текст Label с отформатированным временем после каждой секунды
            UpdateTimerDisplay();
        }
 
        public void UpdateTimerDisplay()
        {
            int minutes = (int)((totalSeconds + previousTotalSeconds) / 60);
            int seconds = (int)((totalSeconds + previousTotalSeconds) % 60);
 
            // Отображаем время в формате "00:00"
            labelTimer.Text = $"{minutes:D2}:{seconds:D2}";
        }
    }
}
Код формы Program.cs
C#
1
2
3
4
5
6
7
8
9
10
11
12
 static void Main()
 {
     Application.EnableVisualStyles();
     Application.SetCompatibleTextRenderingDefault(false);
 
     FormRadioTextBox formRadioTextBox = new FormRadioTextBox();
     FormTimer formTimer = new FormTimer(formRadioTextBox); // Передача ссылки на созданный экземпляр FormRadioTextBox
     FormControls formControls = new FormControls(formTimer, formRadioTextBox); // Передача ссылок на созданные экземпляры FormTimer и FormRadioTextBox
 
     Application.Run(formControls);
 
 }
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.04.2024, 18:08
Ответы с готовыми решениями:

Обновление формы в таймере
Уважаемы знатоки В формах при передвижение обьекта кнопки через другой обьект, второй обьект затираеться или первый обьект проходит...

Обновление ListView в таймере
Здравствуйте, не могу понять почему listview не обновляется каждую секунду. Подскажите в чем проблема, что не так? Вот код activity...

Отсчёт времени в таймере
Как мне запилить вывод отсчёта времени из таймера в лейбл? И как при нажатии на клавишу мне таймер запустить заново? Заранее благодарен.

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
14.04.2024, 18:08
Помогаю со студенческими работами здесь

Отсчет разных промежутков времени на 1 таймере
Здравствуйте. Есть один 16-разрядный таймер/счетчик. Нужно на нем обеспечить отсчет разных промежутков времени. Если бы они шли друг за...

Подсчет времени в таймере даже при выключенном ПК
Всем доброй ночи! Ребята подскажите на форме есть таймер который показывает секунды минуты и сутки, а так же кнопка старт,стоп и сборос....

С# Сохранение текущего времени в таймере при выходе из программы
Доброго времени суток, у меня в программе есть таймер, допустим с интервалом 15 секунд, запускаем таймер при входе в программу. Если таймер...

Код в таймере не работает
Короче я вынес себе мозг. Пожалуйста не игнорьте. private void tmrCheckAnswers_Tick(object sender, EventArgs e) { ...

Не работает перерисовка в таймере на image
Здравствуйте Не знаю в чем проблема но перерисовка не работает. Отрисовывает только 1 раз Вот код: procedure...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Вывод данных через динамический список в справочнике
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru