Показать "Оставшееся время" с установленной даты до настоящего времени

У меня есть приложение, которое, когда происходит определенное действие, точное DATE/TIME записывается как myTime с помощью диспетчера конфигурации Visual Studion, где вы можете добавить настройки.

Это мой параметр: Properties.Settings.Default.voteTime

Я хочу, чтобы как только мое приложение начало показывать метку, на которой будет отображаться "X осталось времени до следующего запроса на голосование"

В моем контексте голосование должно проводиться каждые 12 часов, поэтому

Я хочу, чтобы лейбл в основном показывал, сколько времени осталось от этих 12 часов, начиная с момента голосования, о котором я упоминал выше.

Я перепробовал много техник, но я новичок в C#, и никто не работал для меня, каждый раз, когда на ярлыке был текст по умолчанию или он был пустым...

        DateTime voteTime = Properties.Settings.Default.voteTime;
        DateTime startDate = DateTime.Now;

        //Calculate countdown timer.
        TimeSpan t = voteTime - startDate;
        string countDown = string.Format("{0} Days, {1} Hours, {2} Minutes, {3} Seconds til launch.", t.Days, t.Hours, t.Minutes, t.Seconds);

Выше я попытался написать label1.text = countDown;

Заранее спасибо.

2 ответа

Решение

Как это сделать:

Ты можешь использовать System.Windows.Forms.Timer класс, чтобы продолжать отображать ваше оставшееся время. Вы можете сделать это в следующие шаги:

Создайте и инициализируйте таймер:

Timer timer1 = new Timer();

Создай свой tick Метод события и установить интервал обновления времени отображения:

timer1.Tick += timer1_Tick;
timer1.Interval = 1000; //i am setting it for one second

Теперь запустите таймер:

timer1.Enabled = true;
timer1.Start();

Создайте timer.tick Метод события и обновляйте метку каждую секунду:

void timer1_Tick(object sender, EventArgs e)
{
    TimeSpan TimeRemaining = VoteTime - DateTime.Now;
    label1.Text = TimeRemaining.Hours + " : " + TimeRemaining.Minutes + " : " + TimeRemaining.Seconds;
}

Полный код:

Вот полный код. Вы можете просто скопировать и вставить его:

using System;
using System.Windows.Forms;

namespace WindowsFormsApplication
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            timer1.Tick += timer1_Tick;
            timer1.Interval = 1000;
            timer1.Enabled = true;
            timer1.Start();
        }

        Timer timer1 = new Timer();

        void timer1_Tick(object sender, EventArgs e)
        {
            TimeSpan TimeRemaining = VoteTime - DateTime.Now;
            label1.Text = TimeRemaining.Hours + " : " + TimeRemaining.Minutes + " : " + TimeRemaining.Seconds;
        }

Вот простой способ, использующий элемент управления таймером, который будет обновлять метку каждую минуту:

    TimeSpan TimeLeft = new TimeSpan();
    DateTime voteTime = Properties.Settings.Default.voteTime;      
    public Form3()
    {
        InitializeComponent();
        TimeLeft = voteTime - DateTime.Now;
        label1.Text = TimeLeft.ToString(@"hh\:mm") + " til launch.";
        //This value is in milliseconds.  Adjust this for a different time 
        //interval between updates
        timer1.Interval = 60000;
        timer1.Start();
    }
    private void timer1_Tick(object sender, EventArgs e)
    {
        TimeLeft = voteTime - DateTime.Now;
        label1.Text = TimeLeft.ToString(@"hh\:mm") + " til launch.";
    }
Другие вопросы по тегам