如何在winform中实现跑马灯一样的效果?
How to implement the same effect of marquees in winform?
我想让文字向上滚动或下载。
在html中我们可以使用选取框"Cool Effects with Marquees!" , sample2
c# WebBrowser
控件无法识别 Marquees
的语法
C# 中的一种方法是使用列表框,然后使用计时器滚动列表框。
我想知道是否有简单的方法来做到这一点。
如果你想在控件上绘制动画文本,你需要创建一个自定义控件,有一个计时器,然后移动计时器中的文本位置并使控件无效。覆盖其绘制并在新位置呈现文本。
您可以在我的其他回答中找到从左到右和从右到左的选取框标签:。
Windows 形成选取框标签 - 垂直
在下面的示例中,我创建了一个 MarqueeLabel
控件,它使文本在垂直方向上具有动画效果:
using System;
using System.Drawing;
using System.Windows.Forms;
public class MarqueeLabel : Label
{
Timer timer;
public MarqueeLabel()
{
DoubleBuffered = true;
timer = new Timer();
timer.Interval = 100;
timer.Enabled = true;
timer.Tick += Timer_Tick;
}
int? top;
int textHeight = 0;
private void Timer_Tick(object sender, EventArgs e)
{
top -= 3;
if (top < -textHeight)
top = Height;
Invalidate();
}
protected override void OnPaint(PaintEventArgs e)
{
e.Graphics.Clear(BackColor);
var s = TextRenderer.MeasureText(Text, Font, new Size(Width, 0),
TextFormatFlags.TextBoxControl | TextFormatFlags.WordBreak);
textHeight = s.Height;
if (!top.HasValue) top = Height;
TextRenderer.DrawText(e.Graphics, Text, Font,
new Rectangle(0, top.Value, Width, textHeight),
ForeColor, BackColor, TextFormatFlags.TextBoxControl |
TextFormatFlags.WordBreak);
}
protected override void Dispose(bool disposing)
{
if (disposing)
timer.Dispose();
base.Dispose(disposing);
}
}
我想让文字向上滚动或下载。
在html中我们可以使用选取框"Cool Effects with Marquees!" , sample2
c# WebBrowser
控件无法识别 Marquees
C# 中的一种方法是使用列表框,然后使用计时器滚动列表框。
我想知道是否有简单的方法来做到这一点。
如果你想在控件上绘制动画文本,你需要创建一个自定义控件,有一个计时器,然后移动计时器中的文本位置并使控件无效。覆盖其绘制并在新位置呈现文本。
您可以在我的其他回答中找到从左到右和从右到左的选取框标签:
Windows 形成选取框标签 - 垂直
在下面的示例中,我创建了一个 MarqueeLabel
控件,它使文本在垂直方向上具有动画效果:
using System;
using System.Drawing;
using System.Windows.Forms;
public class MarqueeLabel : Label
{
Timer timer;
public MarqueeLabel()
{
DoubleBuffered = true;
timer = new Timer();
timer.Interval = 100;
timer.Enabled = true;
timer.Tick += Timer_Tick;
}
int? top;
int textHeight = 0;
private void Timer_Tick(object sender, EventArgs e)
{
top -= 3;
if (top < -textHeight)
top = Height;
Invalidate();
}
protected override void OnPaint(PaintEventArgs e)
{
e.Graphics.Clear(BackColor);
var s = TextRenderer.MeasureText(Text, Font, new Size(Width, 0),
TextFormatFlags.TextBoxControl | TextFormatFlags.WordBreak);
textHeight = s.Height;
if (!top.HasValue) top = Height;
TextRenderer.DrawText(e.Graphics, Text, Font,
new Rectangle(0, top.Value, Width, textHeight),
ForeColor, BackColor, TextFormatFlags.TextBoxControl |
TextFormatFlags.WordBreak);
}
protected override void Dispose(bool disposing)
{
if (disposing)
timer.Dispose();
base.Dispose(disposing);
}
}