Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/25: Рейтинг темы: голосов - 25, средняя оценка - 4.88
2 / 2 / 0
Регистрация: 30.01.2018
Сообщений: 141

Смена текста в label с использованием таймера

07.05.2019, 16:43. Показов 4941. Ответов 5
Метки wpf (Все метки)

Студворк — интернет-сервис помощи студентам
Встала задача такого плана - изменение текста в label посредством таймера. Сложность в том, что смена текста должна проходить не через равные интервалы времени, то есть к примеру через 3 секунды, затем 5, далее 9 и 7 соответственно. При этом "жизнь" самого таймера составляет 60 секунд. Как используя DispatcherTimer реализовать данную логику? Подскажите.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
07.05.2019, 16:43
Ответы с готовыми решениями:

Временная смена цвета текста на Label
Необходимо, чтобы при смене текста на лейбле (TextChanged), цвет шрифта менялся на пару секунд и возвращался в цвет, который был до...

Смена текста в Label по нажатию строки с ListBox
Я создал список в ListBox, моя цель при нажатии на значение из ListBox'a чтобы менялcя шрифт текста в Label, что для этого нужно...

Форматированный вывод таймера в Label
Всем привет! Возникла такая проблема: Не могу вывести правильно в лейбл показания таймера. А именно, мне нужно, чтобы при условии...

5
Эксперт JS
6496 / 3907 / 2006
Регистрация: 14.06.2018
Сообщений: 6,781
07.05.2019, 18:53
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
using System;
using System.Windows;
using System.Windows.Threading;
 
namespace Quesyion2449166_WPF
{
    /// <summary>
    /// Логика взаимодействия для MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        DispatcherTimer timer;
        // Отрубим на 10 секундах. Выведутся в textBox1: 3 и 5.
        DispatcherTimer boundTimer = new DispatcherTimer() { Interval = new TimeSpan(0, 0, 10) }; 
        int[] intervals = { 3, 5, 9, 7 };
        int currentIndex = 0;
 
        public MainWindow()
        {
            InitializeComponent();
 
            timer = new DispatcherTimer() { Interval = new TimeSpan(0, 0, intervals[currentIndex]) };
            timer.Tick += Timer_Tick;
 
        }
 
        private void Timer_Tick(object sender, EventArgs e)
        {
            textBox1.Text = intervals[currentIndex].ToString();
            ++currentIndex;
            if (currentIndex == intervals.Length)
                timer.Stop();
            else
                timer.Interval = new TimeSpan(0, 0, intervals[currentIndex]);
        }
 
        private void ButtonStart_Click(object sender, RoutedEventArgs e)
        {
            timer.Start();
            boundTimer.Tick += BoundTimer_Tick;
            boundTimer.Start();
        }
 
        private void BoundTimer_Tick(object sender, EventArgs e)
        {
            timer.Stop();
            boundTimer.Stop();
        }
    }
}
0
2 / 2 / 0
Регистрация: 30.01.2018
Сообщений: 141
08.05.2019, 02:04  [ТС]
amr-now, прошу прощения, я не немного не правильно поставил вопрос. У меня есть заготовленный текст. Как мне его помещать в label? К примеру на пятой секунде - "шаг 1" на девятой "шаг 2" и так далее.
0
Эксперт JS
6496 / 3907 / 2006
Регистрация: 14.06.2018
Сообщений: 6,781
08.05.2019, 06:56
Лучший ответ Сообщение было отмечено Konradvall как решение

Решение

Цитата Сообщение от Konradvall Посмотреть сообщение
У меня есть заготовленный текст. Как мне его помещать в label? К примеру на пятой секунде - "шаг 1" на девятой "шаг 2" и так далее.
Заодно сделал кнопку "Start" неубиваемой при многократном нажатии.
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
using System;
using System.Collections.Generic;
using System.Windows;
using System.Windows.Threading;
 
namespace Quesyion2449166_WPF
{
    /// <summary>
    /// Логика взаимодействия для MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        // Таймер для списка интервалов intervals
        DispatcherTimer timer = new DispatcherTimer();
        // Ограничение жизни таймера 60 секунд
        DispatcherTimer boundTimer = new DispatcherTimer() { Interval = new TimeSpan(0, 0, 60) };
        // Заготовленный текст
        List<string> text = new List<string>() { "Шаг 1", "Шаг 2", "Третий", "Четвертый", "Шестой", "Седьмой" };
        // Интервалы в секундах
        int[] intervals = { 3, 5, 9, 7 };
        int currentIndex;
 
        public MainWindow()
        {
            InitializeComponent();
            timer.Tick += Timer_Tick;
            boundTimer.Tick += BoundTimer_Tick;
        }
 
        private void Timer_Tick(object sender, EventArgs e)
        {
            label1.Content = text[currentIndex];
            ++currentIndex;
            if (currentIndex == intervals.Length)
            {
                timer.Stop();
                boundTimer.Stop();
            }
            else
                timer.Interval = new TimeSpan(0, 0, intervals[currentIndex]);
        }
 
        private void ButtonStart_Click(object sender, RoutedEventArgs e)
        {
            // Корректный перезапуск таймеров при многократном нажатии кнопки "Start"
            timer?.Stop();
            boundTimer?.Stop();
            currentIndex = 0;
            label1.Content = "";
            // Таймер для списка интервалов intervals
            timer.Interval = new TimeSpan(0, 0, intervals[currentIndex]);
 
            timer.Start();
            boundTimer.Start();
        }
 
        private void BoundTimer_Tick(object sender, EventArgs e)
        {
            timer.Stop();
            boundTimer.Stop();
        }
    }
}
https://docs.microsoft.com/ru-... tchertimer
1
2 / 2 / 0
Регистрация: 30.01.2018
Сообщений: 141
11.05.2019, 14:11  [ТС]
amr-now, Прошу прощения за еще один вопрос. У меня данные текстовые заготовки находятся в строковых ресурсах приложения, так как порой объем текста большой, пихать его в код неудобно и не целесообразно. Как мне правильно изменить логику для List<string> text = ...... что бы данные строк брались из ресурсов. Заранее спасибо.

Добавлено через 3 часа 23 минуты
amr-now, небольшая проблема, код отрабатывает не так как должен. Не обрабатывает все интервалы как должно. Доходит до третьего или четвертого и все. Глянь, меня не покидает чувство что я где то пролетел на мелочи.
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
using System;
using System.Collections.Generic;
using System.Windows;
using System.Windows.Threading;
 
namespace Touch_assistant.Windows
{
    /// <summary>
    /// Логика взаимодействия для Splash.xaml
    /// </summary>
    public partial class Splash : Window
    {
 
        //создаем таймеры для работы экрана загрузки
        DispatcherTimer loadTimer = new DispatcherTimer();
        DispatcherTimer boundTimer = new DispatcherTimer() { Interval = new TimeSpan(0, 0, 15) }; // Ограничение жизни таймера 15 секунд
        
        List<string> loadText = new List<string>() { "шаг 1", "шаг 2", "шаг 3", "шаг 4", "шаг 5" };
 
        int[] intervals = { 2, 4, 6, 8, 10 };
        int currentIndex;
 
        public Splash()
        {
            InitializeComponent();
 
            DefaultSplashSett();
            Timers_Start();
 
            loadTimer.Tick += Timer_Tick;
            boundTimer.Tick += BoundTimer_Tick;
        }
 
        // читаем из ресурсов стоковае настройки для экрана загрузки
        private void DefaultSplashSett()
        {
            Lbl_splash_rights.Content = Properties.Settings.Default.Splash_rights_label;
            Lbl_App_name_splash.Content = Properties.Settings.Default.Splash_App_name;
        }
 
        //старт таймеров экрана загрузки
        private void Timers_Start()
        {                      
            loadTimer.Start();
            boundTimer.Start();
        }
 
        private void Timer_Tick(object sender, EventArgs e)
        {
            Tbx_App_loading.Text = loadText[currentIndex];
            ++currentIndex;
            if (currentIndex == intervals.Length)
            {
                loadTimer.Stop();
                boundTimer.Stop();
 
                MainWindow main = new MainWindow();
                main.Show();
 
                Close();
            }
            else
                loadTimer.Interval = new TimeSpan(0, 0, intervals[currentIndex]);
        }
 
        private void BoundTimer_Tick(object sender, EventArgs e)
        {
            loadTimer.Stop();
            boundTimer.Stop();
 
            MainWindow main = new MainWindow();
            main.Show();
 
            Close();
        }
 
       
    }
}
0
Эксперт JS
6496 / 3907 / 2006
Регистрация: 14.06.2018
Сообщений: 6,781
11.05.2019, 19:30
Цитата Сообщение от Konradvall Посмотреть сообщение
Доходит до третьего или четвертого и все.
2 + 4 + 6 = 12 секунд
А общий ограничитель в данном случае 15 секунд.
Числа - это промежутки между сменой караула.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.05.2019, 19:30
Помогаю со студенческими работами здесь

Вывести значения таймера в Label
Друзья, у меня есть небольшая игрушка, так вот в ней я установил таймер - её нужно пройти за определённое время. Если не успел -...

Смена частоты системного таймера
Меняю частоту системного таймера, и, соответственно, сую ему своё прерывание: org 0x7c00 xor ax,ax ; работаем в сегменте 0000...

Вывод времени таймера сразу на Label
Доброго времени суток, необходимо сделать так что бы время таймера выводилось сразу на Label, думал думал и пока получилось вот это: ...

Не получается задать интервал таймера значением из Label
Ошибка на скрине &quot;В чем ошибка или я пень?&quot;: по-Вашему, это заголовок для темы?

Label не отображает системное время даже в событии таймера
Я только начала изучать С#. Занимаюсь проектировкой интерфейса стиральной машинки. Я застряла на часах. private void Form1_Load(object...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru