Click here to Skip to main content
15,867,330 members
Articles / Programming Languages / C#

Easy to Use Marquee Control for Windows Form with Full Designer Support

Rate me:
Please Sign up or sign in to vote.
4.66/5 (37 votes)
23 Mar 2008CPOL5 min read 150.6K   14.1K   81   46
Marque control implementation using .NET 2.0
MarqueControl_Src

Introduction

This is a simple to use Marquee implementation for Windows Forms using .NET 2.0. This control allows you to customize itself easily and within seconds.

Background

I was looking for a Marquee control for Window Forms. I found a couple but they were very restricted in features and moreover they were very restricted in events.

I decided to write a control which will fulfill all of my needs. Further it should be generic enough to be used by others too.

Features

Marquee control has the following features:

  • Easy to use interface
  • Design time support for control and marquee element
  • ToolTip Support
  • Support of various events
  • Support for multicolor marquee
  • Support for left and right image in marquee element
  • Support for Font in marquee
  • Hover stop feature
  • Marquee element click and double click support
  • Notifies when lap is completed

Using Code

You can use this control in two ways.

Via Designer

Use dragdrop feature of Visual Studio. I will recommend to use the compiled assembly for references. Otherwise if recompiling of assembly is done, you will need to restart Visual Studio.

Add in designer

Use designer of SuperMarquee to modify the control.

Control designer

Use Properties of control to fine tune the rest of the properties:

Control properties

Use Element collection editor to modify TextElement collection:

Element collection editor

Use element designer to set element properties.

Element designer

Via Code

C#
MarqueControl.Controls.SuperMarquee superMarquee1 = 
		new MarqueControl.Controls.SuperMarquee();

Use the following code to add element to the control:

C#
TextElement element = new TextElement("Element text");
element.LeftImageIndex = 0;
element.RightImageIndex = 1;
element.IsLink = true;
element.ForeColor = Color.Red;
element.Tag = "Tag for element";
element.Font = new Font("Microsoft Sans Serif", 8.25F);
element.ToolTipText = "Tool tip for element";
superMarquee1.Elements.Add(element);   

Alternatively you can use the following code snippet to add a new range of elements:

C#
MarqueControl.Entity.TextElement textElement1 = 
	new MarqueControl.Entity.TextElement("TextElement 1");
MarqueControl.Entity.TextElement textElement2 = 
	new MarqueControl.Entity.TextElement("TextElement 2");
MarqueControl.Entity.TextElement textElement3 = 
	new MarqueControl.Entity.TextElement("TextElement 3");
superMarquee1.Elements.AddRange(new MarqueControl.Entity.TextElement[] 
               {
                   textElement1,
                   textElement2,
                   textElement3
               }
 );    

Events Description

ItemClicked

This event is fired when user presses mouse button on the element text area.

C#
private void superMarquee1_ItemClicked(object sender, ItemClickEventArgs e)
{
    MessageBox.Show("Item clicked :" + e.Index);
}    

Note

  1. This event is fired when any button is pressed.
  2. This event is fired only if clicked in text area of the element.

ItemDoubleClicked

This event is fired when user double clicks on the element text area. This has similar features as of ItemClicked.

C#
private void superMarquee1_ItemDoubleClicked(object sender, ItemClickEventArgs e)
{
    MessageBox.Show("Item double clicked :" + e.Index);
}   

LapCompleted

This event is fired when a lap is completed. Applicable only if AutoRewind is set to true. This event can be used in the following manner:

C#
private void superMarquee1_LapCompleted(object sender, System.EventArgs e)
{
    MessageBox.Show("Lap completed.");
}    

BeforeToolTip

This event is fired before tooltip is popped. It supports cancellation of the tooltip being displayed. Apart from cancel feature, it supports the following:

  1. ToolTipText - Used to set ToolTip text
  2. Location - Used to set location of the tooltip
  3. Cancel - Used to cancel popup of tooltip

HitTest and HitTestInfo Object

HitTest() function can be used for get information on position of a point relative to the control.

HitTestInfo object contains the following properties:

  • Index - Index of the TextElement if point is above element otherwise it is -1
  • Point - Point where HitTest was performed
  • Area - HitTestArea at which point is located

HitTestArea enumeration contains the following members:

  • Item - Point is above Item. This does not include LeftImage or RightImage
  • LeftImage - Point is above LeftImage of the element
  • RightImage - Point was hit on RightImage of the element
  • Strip - Point was hit on Strip
  • Control - Point is inside the control, but not above Item, LeftImage, RightImage or Strip
  • None - Point is outside the bounds of control
C#
HitTestInfo test = superMarquee1.HitTest(PointToClient(MousePosition));
switch(test.Area)
{
    case HitTestArea.Item:
        break;
    case HitTestArea.LeftImage:
        break;
    case HitTestArea.RightImage:
        break;
    case HitTestArea.Strip:
        break;
    case HitTestArea.Control:
        break;
    case HitTestArea.None:
        break;
}    

Alternatively you can create a new instance of the HitTestInfo class in the following manner:

C#
HitTestInfo test = new HitTestInfo(superMarquee1, PointToClient(MousePosition));
switch(test.Area)
{
    case HitTestArea.Item:
        break;
    case HitTestArea.LeftImage:
        break;
    case HitTestArea.RightImage:
        break;
    case HitTestArea.Strip:
        break;
    case HitTestArea.Control:
        break;
    case HitTestArea.None:
        break;
}    

ToolTip and ToolTipData Object

To use tooltip property AutoToolTip must be set to true. Predefined tooltip can be used or dynamic tooltip can also be used using event BeforeToolTip.

The following code snippet illustrates how to add dynamic tooltip to the element.

C#
private void superMarquee1_BeforeToolTip
	(object sender, GenericCancelEventArgs <ToolTipData> tArgs)
{
     tArgs.Value.ToolTipText = "New dynamic text based on condition.";
}    

The code below will illustrate how to change the position of the tooltip being displayed.

C#
private void superMarquee1_BeforeToolTip
	(object sender, GenericCancelEventArgs<ToolTipData> tArgs)
{
     tArgs.Value.Location = 
	new Point(tArgs.Value.Location.X + 10, tArgs.Value.Location.Y + 20);
}    

This is how your tooltip display can be cancelled.

C#
private void superMarquee1_BeforeToolTip(object sender, GenericCancelEventArgs<tooltipdata /> tArgs)
{
     tArgs.Cancel = true;
}    

Points of Interest

SuperMarquee

Properties

  • HoverStop - Gets or sets that marquee will be running or not if mouse hover is there
  • AutoRewind - Gets or sets on completion of one round of marquee it will start again or not
  • Elements - Gets list of the TextElement associated with the control.
  • Running - Gets or sets whether marquee is running or not
  • AutoToolTip - Gets or sets whether tool tip will be shown automatically
  • ImageList - Gets or sets the ImageList associated with the component
  • StripColor - Gets or sets the Color of the stripe. Enable ShowStrip for displaying the strip.
  • ShowStrip - Gets or sets that strip will be shown or not.
  • MarqueeSpeed - Gets or sets the Speed of the marquee. Maximum speed is 999 and minimum speed is 1.

Events

  • ItemClicked - Fired when Item is clicked
  • ItemDoubleClicked - Fired when Item is double clicked
  • LapCompleted - Fired when lap is completed
  • BeforeToolTip - Fired when ToolTip is about to display

Methods

  • HitTest() - Performs the HitTest
  • Reset() - Reset the control
  • ResetMorquee() - Reset the marquee of control
  • StartMarquee() - Starts marquee
  • StopMarquee() - Stops marquee

TextElement

Properties

  • Text - Text displayed in this element
  • ForeColor - Text color of the element
  • IsLink - Indicates whether the element will be displayed as a link or not
  • Font - Font of this element
  • Tag - User data associated with the element
  • LeftImageIndex - Left image index of the image to be displayed
  • RightImageIndex - Right image index of the image to be displayed
  • ToolTipText - Text displayed in this element

Methods

  • Reset() - Reset the element

Known Issues

  • At high speed, flickering is there
  • Element jumping is sometimes not proper

History

  • 24 March 2008: Initial draft of the control

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Software Developer (Senior)
India India
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions

 
PraisePerfect Marquee control Pin
Member 1185394915-Jun-18 22:59
Member 1185394915-Jun-18 22:59 
QuestionLeft-Right scroling Pin
Muhammad Wilayat Hussain2-Dec-15 23:05
Muhammad Wilayat Hussain2-Dec-15 23:05 
GeneralMy vote of 2 Pin
Member 99931079-Oct-14 9:53
Member 99931079-Oct-14 9:53 
GeneralRe: My vote of 2 Pin
Muhammad Wilayat Hussain2-Dec-15 23:01
Muhammad Wilayat Hussain2-Dec-15 23:01 
GeneralMy vote of 5 Pin
Asif Iqbal A.Khan4-Jun-13 23:03
Asif Iqbal A.Khan4-Jun-13 23:03 
QuestionHow would you change the scroll direction? Pin
Mark Kestenbaum13-Jun-12 5:55
Mark Kestenbaum13-Jun-12 5:55 
BugBug: Does not scroll with one element Pin
Mark Kestenbaum13-Jun-12 2:29
Mark Kestenbaum13-Jun-12 2:29 
Questiontop to bottom Pin
dizpers20-Jun-11 1:18
dizpers20-Jun-11 1:18 
QuestionHow's Smooth tuning Pin
aromdee0413-Jun-11 21:09
aromdee0413-Jun-11 21:09 
GeneralEasy to Use Marquee Control for Windows Form with Full Designer Support by Manish Ranjan Kumar Pin
Ank_ush8-Apr-11 1:27
Ank_ush8-Apr-11 1:27 
GeneralLEFT TO RIGHT?!!! Pin
Houman Masnavi ,Phd2-Aug-10 13:25
Houman Masnavi ,Phd2-Aug-10 13:25 
GeneralMy vote of 5 Pin
mhedenberg20-Jul-10 16:04
mhedenberg20-Jul-10 16:04 
GeneralFlickering Pin
midhat13-Mar-10 1:13
midhat13-Mar-10 1:13 
GeneralRe: Flickering Pin
hgfhfgfsdfsdf30-Aug-10 2:29
hgfhfgfsdfsdf30-Aug-10 2:29 
GeneralRe: Flickering Pin
Member 74095418-Oct-10 7:22
Member 74095418-Oct-10 7:22 
GeneralFlickering and crash Pin
Jörgen Björkman16-Feb-09 23:36
Jörgen Björkman16-Feb-09 23:36 
GeneralRe: Flickering and crash Pin
imresoft30-Dec-09 0:32
imresoft30-Dec-09 0:32 
Generalchange text at runtime Pin
dahras30-Jan-09 6:04
dahras30-Jan-09 6:04 
GeneralABSOLUTELY BRILLIANT WORK ! (Small bug there though) Pin
Symatrix14-Jan-09 8:05
Symatrix14-Jan-09 8:05 
GeneralRe: ABSOLUTELY BRILLIANT WORK ! (Small bug there though) Pin
Lazer323-Dec-09 9:36
Lazer323-Dec-09 9:36 
GeneralRe: ABSOLUTELY BRILLIANT WORK ! (Small bug there though) Pin
imresoft30-Dec-09 0:20
imresoft30-Dec-09 0:20 
GeneralIDE crashes Pin
Zerus Zocker29-Nov-08 1:06
Zerus Zocker29-Nov-08 1:06 
GeneralRe: IDE crashes Pin
dahras30-Jan-09 6:26
dahras30-Jan-09 6:26 
GeneralRe: IDE crashes Pin
wissam_alkordi2-Mar-09 14:28
wissam_alkordi2-Mar-09 14:28 
GeneralRe: IDE crashes Pin
faisal008139-Jul-09 5:19
faisal008139-Jul-09 5:19 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.