如何使标签来回滚动一个单词
本文关键字:一个 单词 滚动 何使 标签 | 更新日期: 2023-09-27 18:24:26
我想出了一个主意,让标签将一个单词滚动到一边,然后更改单词并滚动回另一边,就像一样
"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 framework 4.0。
下面是我要做的,当我测试它时,它似乎工作得很好,我创建了一个带有计时器和标签的windows窗体。确保调用计时器。Start()当您打开窗体时,它将开始在屏幕上跳动。如果将iUBound更改为更大的值,它将在屏幕上移动更多的空间。
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);
}
}
我会保持标签内容不变,只需移动标签,感觉CPU负载应该更少,滚动也会更流畅。
创建一个从0到11的for循环(长度为"ping"的15)。使用new String(' ', i)
,您可以创建一个长度为i
空格的字符串。然后将标签的文本设置为与单词"ping"连接的空格字符串。
现在你可以做另一个循环,从11到0,做同样的事情,但用"pong"这个词。
如果将两个循环都包含在一个循环(while (true) { ... }
)中,则该循环将无限期运行。
您还可能希望在每次使用Thread.Sleep(200)
设置标签文本后添加一个暂停。指定的时间以毫秒为单位。
编辑(因为这不是家庭作业):
转到属性窗口中的事件选项卡,添加Shown
事件处理程序
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();
}
}
}
请注意,此解决方案并不完美,因为表单无法正确关闭。您将不得不中止该程序。使用计时器的解决方案会更顺利地工作,表单在关闭时也会像预期的那样运行,但这是一个简单明了的解决方案。
我发现了这个例子。非常接近你想要的。这两个关键元素是(1)使用StringBuilder函数附加字符;(2)异步委托将动画放在不同的线程中。
StringBuilder
的想法很棒,因为它应该比处理String
更高效。我喜欢Asynchronous delegate
,因为它听起来比Timer
更令人印象深刻