gpt4 book ai didi

c# - C#中的滚动标签

转载 作者:行者123 更新时间:2023-11-30 16:57:51 28 4
gpt4 key购买 nike

我正在寻找一种有效的方式来滚动文本,就像网络术语中的选取框一样。

我使用我在网上找到的一段代码设法实现了这一点:

private int xPos = 0, YPos = 0;

private void Form1_Load(object sender, EventArgs e)
{
//link label
lblText.Text = "Hello this is marquee text";
xPos = lblText.Location.X;
YPos = lblText.Location.Y;
timer1.Start();
}


private void timer1_Tick(object sender, EventArgs e)
{
if (xPos == 0)
{

this.lblText.Location = new System.Drawing.Point(this.Width, YPos);
xPos = this.Width;
}
else
{
this.lblText.Location = new System.Drawing.Point(xPos, YPos);
xPos -= 2;
}
}

代码非常简单,它使用了一个计时器滴答事件。

它最初运行良好,但在滚动 3 或 4 次后,它不再出现。

有什么我可以调整以使滚动无限的吗?

最佳答案

尝试:

private void timer1_Tick(object sender, EventArgs e)
{
if (xPos <= 0) xPos = this.Width;
this.lblText.Location = new System.Drawing.Point(xPos, YPos);
xPos -= 2;
}

您提到如果字符串长于表单宽度,它会“截断”。我假设你的意思是标签一碰到左侧就跳回表单的右侧,这意味着你无法阅读全文?

如果是这样,您可以将标签的“最小左侧”设置为其宽度的负数。这将允许标签在重置之前完全滚出表单:

private void timer1_Tick(object sender, EventArgs e)
{
// Let the label scroll all the way off the form
int minLeft = this.lblText.Width * -1;

if (xPos <= minLeft) xPos = this.Width;
this.lblText.Location = new Point(xPos, yPos);
xPos -= 2;
}

或者,您可以将“最小左值”设置为标签宽度与表单宽度之差的负值,以便在显示最右边的字符之前不会重置:

private void timer1_Tick(object sender, EventArgs e)
{
// Ensure that the label doesn't reset until you can read the whole thing:
int minLeft = (lblText.Width > this.Width) ? this.Width - lblText.Width : 0;

if (xPos <= minLeft) xPos = this.Width;
this.lblText.Location = new Point(xPos, yPos);
xPos -= 2;
}

还有许多其他选项。就像让多个标签轮流背靠背运行一样,所以永远不会有任何空白文本!!您可以计算出要动态生成多少个标签(基于它们的宽度和表单宽度之间的差异)并处理它们在 Timer 事件中的位置。

关于c# - C#中的滚动标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25978653/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com