【问题标题】:When event handler updates the content of a control? C#,WPF事件处理程序何时更新控件的内容? C#,WPF
【发布时间】:2015-01-21 16:04:17
【问题描述】:

我在 buttonClick (WPF) 处理程序上有这个愚蠢的 C# 代码,我想知道为什么文本框只显示最后一个值(=0) 而没有前一个值(9-1)。当我在控制台应用程序中测试代码时,我在命令行中看到了所有值。(我是 C#、WPF 的初学者)

谢谢

private void clock_Click(object sender, RoutedEventArgs e)
{
    DateTime clicktime = DateTime.Now;
    int nextsecont = DateTime.Now.Second + 1;
    int now = clicktime.Second;
    int timer = 10;

    do
    {    
        if (nextsecont == DateTime.Now.Second)
        {
            now++;
            timer--;
            nextsecont++;
            textbox3.Text = timer.ToString();

        }

    } while (nextsecont <= (clicktime.Second + 10));                
}

PS:我知道有更好的方法可以做到这一点(例如使用计时器),但这不是重点。 对不起我的英语..

解释:现在我看到 10 秒的初始值,然后我看到 0。我没有看到中间值..

【问题讨论】:

  • 数字时钟不显示最后 10 分钟的相同原因:它只显示当前值
  • 不以“更好的方式”来做这件事正是重点。您没有使用计时器,因此您所做的只是让您的代码过度循环(从而占用 CPU)10 秒。 UI 从来没有时间刷新。使用计时器,它会起作用。

标签: c# wpf


【解决方案1】:

如果您希望所有数据都显示在文本框中,则需要将数据附加到已经存在的数据中。

textbox3.Text += " " + timer.ToString();

这将取出里面的东西,添加一个空格,然后是计时器。

【讨论】:

  • 我想显示文本框内容的顺序。像计时器一样
  • 现在我看到初始值 10 秒,然后我看到 0。我没有看到中间值..
  • 是的,通过textbox3.Text = timer.ToString(),您每次更新时都会覆盖框中的任何内容。通过+=,您将在文本框信息的末尾添加新信息。
  • 我不确定你所说的“中间值”是什么意思,但我想它们不在那里,因为你只是在 nextsecont == DateTime.Now.Second 时添加到文本框。当您要查找其他信息时,您必须调整该算法以添加信息。可能必须分开写入文本框并调整变量。
  • 即在事件处理程序过去之前文本框内容未更改的点
猜你喜欢
  • 2017-03-24
  • 1970-01-01
  • 2015-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多