WonForm 字幕滚动
这几天做一个WinForm的东西 出现了好多问题、
现在做个字幕向上滚动的窗体、弄来弄始终达不到要求、在窗体上放了两个Panel、顶端那个显示标题、底端那个显示时间等等、中间的信息要向上循环滚动、我放在一个GroupBox里的、但是滚上去总会盖住顶端的那个Panel,我又在中间放了一个Panel,再把GroupBox放在Panel里、让他在Panel里滚动、但是滚上去了就没有了、怎么能循环滚动啊、上边滚完了、下边又出来继续滚,还有就是说 GroupBox.Width=窗体.Width或者Panel.Width=窗体.Width能不能这样设啊、怎么没反应啊 废话有点多、怕说不清楚 能不能说下具体思路啊、谢谢、、、、、
[解决办法]
Action 委托方法 = () => { 移动字幕.Left = 移动字幕.Left - 1; if (移动字幕.Right < 0) 移动字幕.Left = this.Width; };委托方法();
[解决办法]
添加以下类至代码页:
using Microsoft.VisualBasic;using System;using System.Collections;using System.Collections.Generic;using System.Data;using System.Diagnostics;public class ScrollStringLib{ private Control _Ct; private Color _TextColor; private Bitmap _TextLayer; private System.Timers.Timer withEventsField__Timer = new System.Timers.Timer(); private System.Timers.Timer _Timer { get { return withEventsField__Timer; } set { if (withEventsField__Timer != null) { withEventsField__Timer.Elapsed -= _Timer_Elapsed; } withEventsField__Timer = value; if (withEventsField__Timer != null) { withEventsField__Timer.Elapsed += _Timer_Elapsed; } } } private int _ScrollnIndex = 0; private Bitmap _tempBmp; public void ScrollStop() { _Timer.Stop(); } public void ScrollStart(Control Ct, string Text, Color TextColor, int Speed) { _Ct = Ct; if (_TextLayer != null) _TextLayer.Dispose(); Size Sz = Ct.CreateGraphics.MeasureString(Text, _Ct.Font, _Ct.Width).ToSize; Sz = new Size(Sz.Width + 10, Sz.Height + 10); _TextLayer = new Bitmap(Sz.Width, Sz.Height); using (Graphics G = Graphics.FromImage(_TextLayer)) { G.DrawString(Text, _Ct.Font, new SolidBrush(TextColor), new Rectangle(0, 0, Sz.Width, Sz.Height)); } _Timer.Interval = Speed; _Timer.Start(); } private void _Timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) { try { if (_tempBmp != null) _tempBmp.Dispose(); _tempBmp = new Bitmap(_Ct.Width, _Ct.Height); using (Graphics G = Graphics.FromImage(_tempBmp)) { _ScrollnIndex -= 1; if (_TextLayer != null) { if (_ScrollnIndex <= -_TextLayer.Height) _ScrollnIndex = 0; G.DrawImage(_TextLayer, new Rectangle(0, _ScrollnIndex, _Ct.Width, _Ct.Height), new Rectangle(0, 0, _Ct.Width, _Ct.Height), GraphicsUnit.Pixel); } } _Ct.BackgroundImage = _tempBmp; } catch { } }}
[解决办法]