Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C按钮暂停_C#_Forms_User Interface_Button_Click - Fatal编程技术网

C# C按钮暂停

C# C按钮暂停,c#,forms,user-interface,button,click,C#,Forms,User Interface,Button,Click,我正在C上的GUI中制作一个数字时钟。我有5个按钮,4个用于时区转换,一个用于关闭窗体 我的问题是,当我从系统时间按一个中央时间转换按钮时,它将在标签框中闪烁时间约1秒,并恢复到我当前的系统时间 在控制台中,我知道有一个暂停执行来暂停程序。如何使用暂停来按住该设置上的中央时间按钮,同时保持计时器运行?我愿意使用多种形式 这是我的按钮代码: private void Central_Click(object sender, EventArgs e) { hr = DateTime.Now.

我正在C上的GUI中制作一个数字时钟。我有5个按钮,4个用于时区转换,一个用于关闭窗体

我的问题是,当我从系统时间按一个中央时间转换按钮时,它将在标签框中闪烁时间约1秒,并恢复到我当前的系统时间

在控制台中,我知道有一个暂停执行来暂停程序。如何使用暂停来按住该设置上的中央时间按钮,同时保持计时器运行?我愿意使用多种形式

这是我的按钮代码:

private void Central_Click(object sender, EventArgs e)
{
    hr = DateTime.Now.Hour;
    hr = DateTime.Now.Hour - 1;
    min = DateTime.Now.Minute;
    sec = DateTime.Now.Second;

    if (hr > 12)
        hr -= 12;

    if (sec % 2 == 0)
    {
        time.Text = hr + ":" + min + ":" + sec;
    }
    else
    {
        time.Text = hr + " " + min + " " + sec;
    }
}

如果我理解正确的话,也许这样的东西对你有用:

private void Central_Click(object sender, EventArgs e)
{
    // Here you could disable all the buttons

    // endTime defines how long we will show this time zone (5 seconds)
    var endTime = DateTime.Now.Add(TimeSpan.FromSeconds(5));

    while (DateTime.Now < endTime)
    {
        // Show the short time format (hh:mm:ss AM|PM)
        var displayText = DateTime.Now.Subtract(TimeSpan.FromHours(1)).ToString("T");

        if ((DateTime.Now.Second % 2 == 1))
        {
            // Every other second, hide the colons
            displayText = displayText.Replace(":", " ");
        }

        time.Text = displayText;

        // Sleep for one second
        Thread.Sleep(TimeSpan.FromSeconds(1));
    }

    // And here you can enable the buttons again
}
另一件需要注意的事情是,有一些内置的方法可以转换到另一个时区。基本上,您可以得到UTC世界时,然后将其转换为您感兴趣的时区。上面的代码可以转换为这样使用:

private void Central_Click(object sender, EventArgs e)
{
    // endTime defines how long we will show this time zone (5 seconds)
    var endTime = DateTime.Now.Add(TimeSpan.FromSeconds(5));

    while (DateTime.Now < endTime)
    {
        // Get UTC time
        DateTime utcTime = DateTime.UtcNow;

        // Convert it to Central Time
        var displayText = TimeZoneInfo.ConvertTimeFromUtc(utcTime, 
            TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time"))
            .ToString("T");

        if ((DateTime.Now.Second % 2 == 1))
        {
            // Every other second, hide the colons
            displayText = displayText.Replace(":", " ");
        }

        time.Text = displayText;

        // Sleep for one second
        Thread.Sleep(TimeSpan.FromSeconds(1));
    }
}

你的问题很不清楚。但我猜你只是在做一个普通的时钟。为此,您需要做的就是保持时区设置。因此,您需要将它们存储在一个或两个类级变量中,可能如下所示:

TimeSpan correction = new TimeSpan(0);
string zone = "ET";

private void timer1_Tick(object sender, EventArgs e)
{
    // display the corrected time with its name
    time.Text = (DateTime.Now + correction).ToString("h:mm:ss ") + zone;
}

private void Central_Click(object sender, EventArgs e)
{
    correction = new TimeSpan(-1, 0, 0);  // set the hours of the new zone
    zone = "CT";                         // set its name
}
我希望你对计时器有一个更好的名字,就像你使用的其他名字一样。。虽然我总是包含一个前缀,显示控件的类型

另外,请查看预定义日期和时间格式的详细信息,其中许多格式将根据您的机器本地化而工作:

如果我不明白你说的“暂停”是什么意思,请澄清!如果您不想真正切换到新时区,而只想显示一小段时间,只需添加3或4行即可..:

一个新变量用于保存尚未保存分区的时间:

int secondsToHold = 0;
单击中的一行将其设置为几秒钟,此处我占用3秒钟:

secondsToHold = (int) (3 *  1000f /timer1.Interval);
最后,在勾号事件中编码以检查和重置变量:

if (secondsToHold > 0) secondsToHold -= 1;
else { correction = new TimeSpan(0); zone = "ET"; }

所以你想让你的程序休眠几秒钟来显示你的数据,然后继续代码?