2013-04-09 34 views
1

我有一个赢得表格应用程序,并且用户想要滚动消息(如新闻动态消息提要)。菜单栏中的滚动消息

我可以用自动收报机 - 客户希望信息在菜单栏的未使用区域滚动 - 沿着主窗口的顶部。

我不确定您是否可以在菜单栏顶部堆叠控件。

有谁知道这是否可以实现(堆叠在菜单栏上),如果你这样做 - 请提供一些方向。 c#请

谢谢

+0

如何把Menü酒吧变成一个小组,而不是直接的形式? – 2013-04-09 18:17:08

回答

1

这里是我使用的类....

它会创建在工具箱中的自定义控件...它拖到你想要的控制和瓦拉

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System; 
using System.Text; 
using System.Drawing; 
using System.ComponentModel; 
using System.Windows.Forms; 

namespace Winform_menu 
{ 
    internal class NewsTicker : Panel 
    { 
    private Timer mScroller; // Scroll timer 
    private int mOffset; // Offset of scrolled text 
    private string mText; // Text to scroll 
private Size mPixels; // Width of text in pixels 
private Bitmap mBuffer; // Double-buffering buffer 

public NewsTicker() 
{ 
    mScroller = new Timer(); 
    mScroller.Interval = 30; 
    mScroller.Enabled = false; 
    mScroller.Tick += DoScroll; 
} 

[Browsable(true)] 
public override string Text 
{ 
    get { return mText; } 
    set 
    { 
    mText = value; 
    mScroller.Enabled = mText.Length > 0; 
    mPixels = TextRenderer.MeasureText(mText, this.Font); 
    mOffset = this.Width; 
    } 
} 

private void DoScroll(object sender, EventArgs e) 
{ 
    // Adjust offset and paint 
    mOffset -= 1; 
    if (mOffset < -mPixels.Width) mOffset = this.Width; 
    Invalidate(); 
} 

protected override void OnPaintBackground(PaintEventArgs e) 
{ 
    // Do nothing 
} 

protected override void OnPaint(PaintEventArgs e) 
{ 
    if (mBuffer == null || mBuffer.Width != this.Width || mBuffer.Height != this.Height) 
    mBuffer = new Bitmap(this.Width, this.Height); 
    Graphics gr = Graphics.FromImage(mBuffer); 
    Brush bbr = new SolidBrush(this.BackColor); 
    Brush fbr = new SolidBrush(this.ForeColor); 
    gr.FillRectangle(bbr, new Rectangle(0, 0, this.Width, this.Height)); 
    gr.DrawString(mText, this.Font, fbr, mOffset, 0); 
    e.Graphics.DrawImage(mBuffer, 0, 0); 
    bbr.Dispose(); 
    fbr.Dispose(); 
    gr.Dispose(); 
    } 
    } 
} 
2

奇怪的要求。这里有一些东西让你开始:

public Form1() { 
    InitializeComponent(); 
    menuStrip1.Paint += menuStrip1_Paint; 
} 

void menuStrip1_Paint(object sender, PaintEventArgs e) { 
    int startLeft = 0; 
    foreach (ToolStripMenuItem menu in menuStrip1.Items) { 
    startLeft = Math.Max(startLeft, menu.Bounds.Right); 
    } 
    startLeft += 16; 
    e.Graphics.DrawRectangle(Pens.Red, 
          new Rectangle(startLeft, 0, 
             menuStrip1.ClientSize.Width - startLeft - 1, 
             menuStrip1.ClientSize.Height - 1)); 
} 

它找到可用的菜单条部分。这是您使用计时器绘制的矩形。可能会闪烁。

+0

不错 - 谢谢....但闪烁对他们来说太过分了+1帮助我在正确的方向 – pithhelmet 2013-04-18 18:15:30