winform 实现信息走马灯 如何实现信息走马灯如果有一条信息 该条信息一直执行走马灯效果如果有N条信息 N条信息执行一次后重头开始执行 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 其实也是网上找到的,摘自http://hi.baidu.com/dwwlmx900530/blog/item/783061efc9e5473e2cf5341c.html 很简单啊,你跑马灯的效果都实现了跑马灯里面的文字还不好实现啊? 你就直接把N条信息链接成一条 然后每条信息之间加个空格之类的 隔开 就ok了,或者你要一条条的显示 也可以 你就直接封装所有的信息到一个list 中然后循环显示就ok了吧。 谢谢 实现了,不过出现了个问题 list里的值越来越多 走马灯运行的越来越快 这样好像不是很好 因为text一开始的长度不是很长 使用timer运行后速度普通 等到text的长度变长了后 timer的interval不变 所以走马灯的速度非常快 都看不清楚了 请问有什么好办法解决吗 这个我早就自己编过一个,当时是房产中介的触摸屏要这东西,是我自己想出来的,也就是文本改变top或left而已。 当你的内容长度改变时 timer控件也重新设定interval属性值就行了 根据内容设定一个换算公式 自己慢慢摸索 看怎样最合适 设定了一个公式,让timer根据text的长度去变化。现在出现了个问题,timer.interval是改变了 但是文字的移动会变成一顿一顿的 我让timer.interval = 初始值*list的个数 简单控制下,在list长度改变时timer.Interval = list.Count * 2000 重新思考了一下 timer应该跟text的长度没关系,前面的想法text长度变大,速度才变快应该是错得,测试了一个长度很长的text timer不变,他的速率并不会变快 长度改变时先timer.Enable = false; (或者控制显示面板的Visibletimer.Interval = list.Count * 2000timer.Enable = 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(); });} 暂时还没能实现 _workerScrollText是什么? UP,UP 我现在走马灯效果是很OK的。目前问题是比如我突然增加一条记录,那走马灯的记录也要增加,增加的这条记录我已经找出来了,应该要怎样添加到当前显示的记录后面,而且速度不改变 http://blog.sina.com.cn/s/blog_657061860100nt0x.html _workerScrollText 是一个BackgroundWorker,这玩意儿用来做UI线程同步很好用。 给你一个完整的例子吧,你的显示内容要动态改变的,就自己修改一下这下面的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(); }} c#做的webservice里自动截取xml中回车前部分的内容? 继承方面问题解答 如何将u12289 转换成汉字... 求解... 在线等待.. 【版务帖】2009年4月C#版务帖 如何获取System.Timers.Timer类当前倒计时的数字 初看C#问个简单的问题 为什么无法ref string 转换为 ref object 如何获取其他程序中的Internet Server Explorer中的HtmlDoucment对象 C#如何向条码打印机传送指令 自定义控件的动态添加,大虾请进 C#应用程序安装部署问题(急,在线等待) 求救.NET使用COM访问DOMINO....
timer.Interval = list.Count * 2000
timer.Enable = false; (或者控制显示面板的Visible
timer.Interval = list.Count * 2000
timer.Enable = 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();
});
}
_workerScrollText 是一个BackgroundWorker,这玩意儿用来做UI线程同步很好用。
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();
}
}