【问题标题】:Is this the easiest way to make an 'animated' text?这是制作“动画”文本的最简单方法吗?
【发布时间】:2014-04-10 09:43:09
【问题描述】:

我正在尝试在我的应用程序中添加“Loading...”文本(或其他此类文本)。但这是最简单、最短的方法吗?

我现在正在使用这个代码:

private void timer1_Tick(object sender, EventArgs e)
{
    if (label1.Text == "Loading")
        label1.Text = "Loading .";
    else if (label1.Text == "Loading .")
        label1.Text = "Loading . .";
    else if (label1.Text == "Loading . .")
        label1.Text = "Loading . . .";
    else if (label1.Text == "Loading . . .")
        label1.Text = "Loading";
}

【问题讨论】:

    标签: c# winforms animation text


    【解决方案1】:

    怎么样:

    private int numberOfPoints = 0;
    
    private void timer1_Tick(object sender, EventArgs e)
    {
       int maxPoints = 3;
       label.Text = "Loading" + new string('.', numberOfPoints);
       numberOfPoints = (numberOfPoints + 1) % (maxPoints + 1);
    }
    

    【讨论】:

      【解决方案2】:

      更短的方法

      private void timer1_Tick(object sender, EventArgs e)
      {
         label1.Text = (label1.Text == "Loading . . .") ? "Loading" : (label1.Text + " .");
      }
      

      【讨论】:

        【解决方案3】:

        我没有运行代码,但我希望你能明白。

        string[] messages = {
            "loading",
            "loading .",
            "loading ..",
            "loading ..."
        };
        
        int turn = 0;
        
        private void timer1_Tick(object sender, EventArgs e)
        {
            label1.Text = messages[turn++];
            turn %= messages.Length;
        }
        

        【讨论】:

        • 'System.Array' 不包含'lenght' 的定义,并且找不到接受'System.Array' 类型的第一个参数的扩展方法'Lenght'(您是否缺少 using 指令还是程序集参考?)
        • 应该是Length而不是length;我已经编辑了@SAM 帖子来修复它;无论如何在这里寻找我的答案:它给你一个更紧凑解决方案
        • 忍不住:var messages = Enumerable.Range(0, 5).Select(n => "Loading" + new String('.', n)).ToArray();
        • @jyrka: 好的,但是你要求最简单的最短的方法来完成所请求的任务......而我的至少是,最短的 :) 无论如何,我很高兴知道您对 SAM 解决方案感到满意:SO 上最重要的事情是帮助人们解决问题……SAM 的回答对你,那对我也有好处。
        • @MorixDev 我确实在 SAM 之前查看了您的代码,但代码在“加载”之后仅产生 2 个点,当我将数字从 3 更改为 4 时,这不是问题。最后一件事是你的代码像这样把点放在一起: "..." ,但我需要它像这样 "..." 更加“可见”
        【解决方案4】:

        我建议类似的东西:

        private int counter = 0;
        
        private void timer1_Tick(object sender, EventArgs e)
        {
            label1.Text = string.Format("Loading{0}", new string('.', (++counter) % 3));
        }
        

        【讨论】:

          【解决方案5】:

          我不知道你使用的是哪种技术,但是在 WPF、Silverlight、WP、Win8 等中,你应该使用Storyboards

          Storyboards Overview

          本主题展示了如何使用 Storyboard 对象来组织和应用动画。它描述了如何以交互方式操作 Storyboard 对象并描述了间接属性定位语法。

          样本:

          <Storyboard>
             <DoubleAnimation 
               Storyboard.TargetName="MyRectangle"
               Storyboard.TargetProperty="Width"
               From="100" To="200" Duration="0:0:1" />
          
            <ColorAnimation 
              Storyboard.TargetName="MySolidColorBrush"
              Storyboard.TargetProperty="Color"
              From="Blue" To="Red" Duration="0:0:1" />  
          </Storyboard>
          

          对于 WinForms,您可以找到答案here

          本文旨在解释如何向 Windows 窗体添加动画。第一部分将通过设计一个 Windows 窗体来简要解释其背后的过程。接下来是一个使用 Graphics 类在 Form 上绘图的示例。最后,本文将以可在 .NET Framework 的 DOS 提示符下编译或使用构成 Visual Studio 项目的单独文件构建的代码作为结尾。

          【讨论】:

          • 我正在使用 C# Windows 窗体应用程序。
          • 这个技术对我来说太老了。你可以找到你的答案here
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-10-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-09-23
          • 2011-01-14
          • 2014-01-30
          相关资源
          最近更新 更多