2013-04-09 47 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