首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何让标签来回滚动一个单词?

问如何让标签来回滚动一个单词?
EN

Stack Overflow用户
提问于 2012-02-12 06:59:28
回答 4查看 1.7K关注 0票数 3

我想出了一个想法,让标签将一个单词滚动到一边,然后更改单词,然后滚动回另一个标签,如下所示

代码语言:javascript
复制
   "ping           "
   " ping          "
   "  ping         "
   "   ping        "
   "    ping       "
   "     ping      "
   "      ping     "
   "       ping    "
   "        ping   "
   "         ping  "
   "          ping "
   "           ping"
   "           pong"
   "          pong "
   "         pong  "
   "        pong   "
   "       pong    "
   "      pong     "
   "     pong      "
   "    pong       "
   "   pong        "
   "  pong         "
   " pong          "
   "pong           "

我希望它只在一个常量循环中进行,但我不知道我将如何开始这样做,如果有人能帮助我,我会非常感激。文本的最大长度必须为15个字符。

我不关心它是否平滑滚动。

我希望它是一个Winforms应用程序,使用.Net Framework4.0。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-02-12 07:14:09

创建一个从0到11的for循环(15 -“ping”的长度)。使用new String(' ', i),您可以创建一个长度为i spaces的字符串。然后将标签的文本设置为与单词"ping“连接的空格字符串。

现在你可以做另一个循环,从11到0运行,做同样的事情,但是带着"pong“这个词。

如果将两个循环都包含在一个无限循环(while (true) { ... })中,这将无限期地运行。

您可能还希望在每次使用Thread.Sleep(200)设置标签文本后添加暂停。其中指定的时间以毫秒为单位。

编辑(因为这不是家庭作业):

转到“属性”窗口中的“事件”选项卡,然后添加一个Shown事件处理程序

代码语言:javascript
复制
private void frmMarquee_Shown(object sender, EventArgs e)
{
    while (true) {
        for (int i = 0; i <= 11; i++) {
            label1.Text = new String(' ', i) + "ping";
            System.Threading.Thread.Sleep(100);
            Application.DoEvents();
        }
        for (int i = 11; i >= 0; i--) {
            label1.Text = new String(' ', i) + "pong";
            System.Threading.Thread.Sleep(100);
            Application.DoEvents();
        }
    }
}

请注意,此解决方案并不完美,因为窗体将不会正确关闭。你必须中止这个程序。使用计时器的解决方案会工作得更流畅,窗体在关闭时会像预期的那样工作,但这是一个简单明了的解决方案。

票数 0
EN

Stack Overflow用户

发布于 2012-02-12 07:20:32

这就是我要做的,当我测试它的时候,它看起来工作得很好,我创建了一个带有计时器和标签的窗口窗体。确保在打开表单时调用timer.Start(),它将开始在屏幕上弹出。如果您将iUBound更改为更大的值,它将在屏幕上移动更多的空格。

代码语言:javascript
复制
    string _sPing = "ping";
    string _sPong = "pong";
    bool bGoingUp = true;
    int iUBound = 15;
    int iCnt = 1;

    public Form1()
    {
        InitializeComponent();
        timer1.Start();
    }

    private void timer1_Tick(object sender, EventArgs e)
    {

        if (bGoingUp)
        {
            label1.Text = " " + label1.Text;
            iCnt++;
        }
        else
        {
            label1.Text = label1.Text.Substring(1,label1.Text.Length - 1);
            iCnt--;
        }

        if (iCnt == iUBound)
        {
            bGoingUp = false;
            label1.Text = label1.Text.Replace(_sPing, _sPong);
        }
        else if (iCnt == 1)
        {
            bGoingUp = true;
            label1.Text = label1.Text.Replace(_sPong, _sPing);
        }

   }
票数 1
EN

Stack Overflow用户

发布于 2012-02-12 08:38:53

我会保持标签内容不变,只是移动标签,感觉应该更少的CPU负载和滚动将更平滑。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9244800

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档