如何实现信息走马灯
如果有一条信息  该条信息一直执行走马灯效果
如果有N条信息  N条信息执行一次后重头开始执行

解决方案 »

  1.   

    其实也是网上找到的,摘自http://hi.baidu.com/dwwlmx900530/blog/item/783061efc9e5473e2cf5341c.html
      

  2.   

    很简单啊,你跑马灯的效果都实现了跑马灯里面的文字还不好实现啊? 你就直接把N条信息链接成一条 然后每条信息之间加个空格之类的 隔开 就ok了,或者你要一条条的显示 也可以 你就直接封装所有的信息到一个list 中然后循环显示就ok了吧。
      

  3.   

    谢谢  实现了,不过出现了个问题   list里的值越来越多   走马灯运行的越来越快  这样好像不是很好  因为text一开始的长度不是很长  使用timer运行后速度普通   等到text的长度变长了后   timer的interval不变  所以走马灯的速度非常快  都看不清楚了  请问有什么好办法解决吗
      

  4.   

    这个我早就自己编过一个,当时是房产中介的触摸屏要这东西,是我自己想出来的,也就是文本改变top或left而已。
      

  5.   

    当你的内容长度改变时 timer控件也重新设定interval属性值就行了 根据内容设定一个换算公式 自己慢慢摸索 看怎样最合适
      

  6.   

    设定了一个公式,让timer根据text的长度去变化。现在出现了个问题,timer.interval是改变了  但是文字的移动会变成一顿一顿的
      

  7.   

    我让timer.interval = 初始值*list的个数 
      

  8.   

    简单控制下,在list长度改变时
    timer.Interval = list.Count * 2000
      

  9.   

    重新思考了一下   timer应该跟text的长度没关系,前面的想法text长度变大,速度才变快应该是错得,测试了一个长度很长的text  timer不变,他的速率并不会变快
      

  10.   

    长度改变时先
    timer.Enable = false; (或者控制显示面板的Visible
    timer.Interval = list.Count * 2000
    timer.Enable = true;
      

  11.   

    这是我自己平时经常用的一个走马灯方式显示版权信息的线程,稍微改一改,就可以实现你的要求。
    private string _stringScrollText = @"老毕出品,版权所有。http://www.cnblogs.com/abbey";private void InitializeScrollTextWorker()
    {
    _workerScrollText.DoWork += new DoWorkEventHandler(
    (s, t) =>
    {
    int LENGTHOFSCROLLTEXT = _stringScrollText.Length;
    int shift = 0; while (true)
    {
    if (_workerScrollText.CancellationPending)
    {
    t.Cancel = true;
    return;
    } Thread.Sleep(500);
    _workerScrollText.ReportProgress(shift); shift++;
    if (shift > LENGTHOFSCROLLTEXT)
    shift = 0;
    }
    }); _workerScrollText.ProgressChanged += new ProgressChangedEventHandler(
    (s, t) =>
    {
    StringBuilder temp = new StringBuilder();
    temp.Append(_stringScrollText.Substring(t.ProgressPercentage));
    temp.Append("    ");
    temp.Append(_stringScrollText.Substring(0, t.ProgressPercentage)); this.labelCopyright.Text = temp.ToString();
    });
    }
      

  12.   

    暂时还没能实现  _workerScrollText是什么?
      

  13.   

    UP,UP  我现在走马灯效果是很OK的。目前问题是比如我突然增加一条记录,那走马灯的记录也要增加,增加的这条记录我已经找出来了,应该要怎样添加到当前显示的记录后面,而且速度不改变
      

  14.   

    http://blog.sina.com.cn/s/blog_657061860100nt0x.html
      

  15.   


    _workerScrollText 是一个BackgroundWorker,这玩意儿用来做UI线程同步很好用。
      

  16.   

    给你一个完整的例子吧,你的显示内容要动态改变的,就自己修改一下这下面的ProgressChanged事件响应方法。
    public partial class MainForm : Form
    {
    public MainForm()
    {
    InitializeComponent();
    InitializeScrollTextWorker();
    } private BackgroundWorker _workerScrollText = new BackgroundWorker() { WorkerSupportsCancellation = true, WorkerReportsProgress = true };
    private string _stringScrollText = @"老毕出品,版权所有。http://www.cnblogs.com/abbey"; private void InitializeScrollTextWorker()
    {
    _workerScrollText.DoWork += new DoWorkEventHandler(
    (s, t) =>
    {
    int LENGTHOFSCROLLTEXT = _stringScrollText.Length;
    int shift = 0; while (true)
    {
    if (_workerScrollText.CancellationPending)
    {
    t.Cancel = true;
    return;
    } Thread.Sleep(500);
    _workerScrollText.ReportProgress(shift); shift++;
    if (shift > LENGTHOFSCROLLTEXT)
    shift = 0;
    }
    }); _workerScrollText.ProgressChanged += new ProgressChangedEventHandler(
    (s, t) =>
    {
    StringBuilder temp = new StringBuilder();
    temp.Append(_stringScrollText.Substring(t.ProgressPercentage));
    temp.Append("    ");
    temp.Append(_stringScrollText.Substring(0, t.ProgressPercentage)); this.labelCopyright.Text = temp.ToString();
    });
    } private void MainForm_Load(object sender, EventArgs e)
    {
    // start thread to scroll text of labelCopyright.
    this.labelCopyright.Text = _stringScrollText;
    _workerScrollText.RunWorkerAsync();
    } private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
    {
    _workerScrollText.CancelAsync();
    }
    }