答案 0 :(得分:0)
使用两个Labels
和一个TrackBar
的示例。
TrackBar
确定一个标签内的字符串位置,每当字符串移动时,该位置就会在第二个Label上反映出来。
这种级联效果是使用第二个Label的.Invalidate()方法生成的,该方法是从第一个Label Paint()事件调用的。
我只是在这里使用Graphics.MeasureString()和Graphics.DrawString()。
您也可以使用相关的TextRenderer方法,但是在Label中,度量是相同的。
结果的视觉表示:
float stringLength = 0F;
string loremIpsum = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.";
StringFormat MarqueeFormat = new StringFormat(StringFormatFlags.NoWrap | StringFormatFlags.FitBlackBox)
{
Alignment = StringAlignment.Near,
Trimming = StringTrimming.None
};
private void lblMarquee1_Paint(object sender, PaintEventArgs e)
{
SizeF stringSize = e.Graphics.MeasureString(loremIpsum, ((Control)sender).Font, -1, MarqueeFormat);
PointF stringLocation = new PointF(trackBar1.Value, (((Control)sender).Height - stringSize.Height) / 2);
stringLength = ((Control)sender).ClientRectangle.Width - stringLocation.X;
e.Graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAliasGridFit;
e.Graphics.DrawString(loremIpsum, ((Control)sender).Font, Brushes.Black, stringLocation, MarqueeFormat);
lblMarquee2.Invalidate();
}
private void lblMarquee2_Paint(object sender, PaintEventArgs e)
{
SizeF stringSize = e.Graphics.MeasureString(loremIpsum, ((Control)sender).Font, -1, MarqueeFormat);
PointF stringLocation = new PointF(-stringLength, (((Control)sender).Height - stringSize.Height) / 2);
e.Graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAliasGridFit;
e.Graphics.DrawString(loremIpsum, ((Control)sender).Font, Brushes.Black, stringLocation, MarqueeFormat);
}
private void trackBar1_ValueChanged(object sender, EventArgs e)
{
lblMarquee1.Invalidate();
}