我想出了一个想法,让标签将一个单词滚动到一边,然后更改单词,然后滚动回另一个标签,如下所示
"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。
发布于 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事件处理程序
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();
}
}
}请注意,此解决方案并不完美,因为窗体将不会正确关闭。你必须中止这个程序。使用计时器的解决方案会工作得更流畅,窗体在关闭时会像预期的那样工作,但这是一个简单明了的解决方案。
发布于 2012-02-12 07:20:32
这就是我要做的,当我测试它的时候,它看起来工作得很好,我创建了一个带有计时器和标签的窗口窗体。确保在打开表单时调用timer.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);
}
}发布于 2012-02-12 08:38:53
我会保持标签内容不变,只是移动标签,感觉应该更少的CPU负载和滚动将更平滑。
https://stackoverflow.com/questions/9244800
复制相似问题