·您现在的位置: 云翼网络 >> 文章中心 >> 网站建设 >> 网站建设开发 >> ASP.NET网站开发 >> 倒计时控件

倒计时控件

作者:佚名      ASP.NET网站开发编辑:admin      更新时间:2022-07-23

最近做一个WPF小项目需要使用到计时器,因此写了一个计时控件,记录下来,以便下次使用。

 

前台的XAML:

<UserControl x:Class="Test.CountDown"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/PResentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             mc:Ignorable="d" 
             d:DesignHeight="110" d:DesignWidth="150">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="43*" />
            <ColumnDefinition Width="13"/>
            <ColumnDefinition Width="43*" />
            <ColumnDefinition Width="13"/>
            <ColumnDefinition Width="43*" />
        </Grid.ColumnDefinitions>
        <TextBlock Text="00" Name="HourArea"  VerticalAlignment="Center" FontSize="30" Background="Transparent" Grid.Column="0" Foreground="DarkOrange" />
        <TextBlock Text=":" Name="HourSplitMinute"  VerticalAlignment="Center" FontSize="30" Background="Transparent" Grid.Column="1" Foreground="DarkOrange" />
        <TextBlock Text="00" Name="MinuteArea" VerticalAlignment="Center" FontSize="30" Background="Transparent" Grid.Column="2" Foreground="DarkOrange" />
        <TextBlock Text=":" Name="MinuteSplitSecond"  VerticalAlignment="Center" FontSize="30" Background="Transparent" Grid.Column="3" Foreground="DarkOrange" />
        <TextBlock Text="00"  Name="SecondArea" VerticalAlignment="Center" FontSize="30" Background="Transparent" Grid.Column="4" Foreground="DarkOrange" />
    </Grid>
</UserControl>
View Code

 

后台的逻辑:

public partial class CountDown : UserControl
    {
        public DispatcherTimer timer;
        public Process pro;
        public Stopwatch sw = new Stopwatch();
        public int seconds;

        public CountDown()
        {
            InitializeComponent();
            pro = new Process();

            timer = new DispatcherTimer();
            timer.Interval = new TimeSpan(0, 0, 1);
            timer.Tick += new EventHandler(timer_Tick);
        }

        void timer_Tick(object sender, EventArgs e)
        {
            TimeSpan ts = new TimeSpan (0,0,seconds);
            pro.totalSecond = (int)(ts - sw.Elapsed).TotalSeconds;
            if (pro .totalSecond > 0)
            {
                HourArea.Text = pro.GetHour();
                MinuteArea.Text = pro.GetMinute();
                SecondArea.Text = pro.GetSecond();
            }
            else
            {
                timer.Stop();
                sw.Stop ();
                sw.Reset();
                SecondArea.Text = string.Format("{0:D2}", 0);
            }
        }

    }

    public class Process
    {
        public int totalSecond;

        //获取小时字符串
        public string GetHour()
        {
            return string.Format("{0:D2}", totalSecond / 3600);
        }

        //获取分钟字符串
        public string GetMinute()
        {
            return string.Format("{0:D2}", (totalSecond / 60 - ((int)(totalSecond / 3600) * 60)));
        }

        //获取秒字符串
        public string GetSecond()
        {
            return string.Format("{0:D2}", totalSecond % 60);
        }
    }
View Code

 

调用:

       this.countDown1.timer.Stop();
       this.countDown1.sw.Reset();
       this.countDown1.seconds = 300;//传入倒计时总时间(秒)
       this.countDown1.timer.Start();
       this.countDown1.sw.Start();

 

2014。11.28日补充:

最近一个小项目需要用到服务器的系统时间,而且需要精确到小数点后三位。方法如下:

public DateTime GetTime()
        {
            string strSql = "select getdate()";
            DateTime dt;
            SqlDataReader dataReader = DbHelperSQL.ExecuteReader(strSql);
            if (dataReader.Read())
            {
                dt = (DateTime)dataReader[0];
                dataReader.Close();
                return dt;
            }
            return DateTime.MinValue;
        }