Click here to Skip to main content
15,885,366 members
Articles / Programming Languages / C#
Alternative
Tip/Trick

Usage of a TrackBar as a ToolStripMenuItem

Rate me:
Please Sign up or sign in to vote.
0.00/5 (No votes)
1 Nov 2011CPOL 9.7K   1
Create a custom eventargs to make the eventhandling simpler.Any code interested in the change in the tractbar is very likely interested in its value..../// /// Custom event arguments class so we can push the value of the trackbar/// to any interested subscribers./// public class...
Create a custom eventargs to make the eventhandling simpler.
Any code interested in the change in the tractbar is very likely interested in its value....

C#
/// <summary>
/// Custom event arguments class so we can push the value of the trackbar
/// to any interested subscribers.
/// </summary>
public class TrackBarEventArgs: EventArgs
{
   /// <summary>
   /// The new value of the trackbar.
   /// </summary>
   public int NewValue {get;set;}
}


C#
[System.ComponentModel.DesignerCategory("code")]
        [ToolStripItemDesignerAvailability(ToolStripItemDesignerAvailability.ContextMenuStrip | ToolStripItemDesignerAvailability.MenuStrip)]
        public partial class ToolStripMenuItem : ToolStripControlHost
        {
            public ToolStripMenuItem()
                : base(CreateControlInstance())
            {
            }
            /// <summary>
            /// Create a strongly typed property called TrackBar - handy to prevent casting everywhere.
            /// </summary>
            public TrackBar TrackBar
            {
                get
                {
                    return Control as TrackBar;
                }
            }
            /// <summary>
            /// Create the actual control, note this is static so it can be called from the
            /// constructor.
            ///
            /// </summary>
            /// <returns></returns>
            private static Control CreateControlInstance()
            {
                TrackBar t = new TrackBar();
                t.AutoSize = false;
                // Add other initialization code here.
                return t;
            }
            [DefaultValue(0)]
            public int Value
            {
                get { return TrackBar.Value; }
                set { TrackBar.Value = value; }
            }
            /// <summary>
            /// Attach to events we want to re-wrap
            /// </summary>
            /// <param name="control"></param>
            protected override void OnSubscribeControlEvents(Control control)
            {
                base.OnSubscribeControlEvents(control);
                TrackBar trackBar = control as TrackBar;
                // you can ommit the delegate creation:
                trackBar.ValueChanged += trackBar_ValueChanged;
            }
            /// <summary>
            /// Detach from events.
            /// </summary>
            /// <param name="control"></param>
            protected override void OnUnsubscribeControlEvents(Control control)
            {
                base.OnUnsubscribeControlEvents(control);
                TrackBar trackBar = control as TrackBar;
                // you can ommit the delegate creation: new EventHandler();
                trackBar.ValueChanged -= trackBar_ValueChanged;
            }
            /// <summary>
            /// Routing for event
            /// TrackBar.ValueChanged -> ToolStripTrackBar.ValueChanged
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            void trackBar_ValueChanged(object sender, EventArgs e)
            {
                // when the trackbar value changes, fire an event.
                if (this.ValueChanged != null)
                {
                    // Use custom event arguments so we can push the value of the trackbar.
                    var arguments = new TrackBarEventArgs();
                    arguments.NewValue = TrackBar.Value;  
                    ValueChanged(sender, e);
                }
            }
            // add an event that is subscribable from the designer.
            // Changed to type of: TrackBarEventArgs
            public event EventHandler<trackbareventargs> ValueChanged;

            // set other defaults that are interesting
            protected override Size DefaultSize
            {
                get
                {
                    return new Size(200, 16);
                }
            }
       } </trackbareventargs>



Usage:

C#
 private void ToolStripMenuItem1_ValueChanged(object sender, TrackBarEventArgs e)
{
    //The trackbar value is stored in the event args for easy access.
    int trackbarValue = e.NewValue;
    pictureBox2.Image = ChangeB(new Bitmap(pictureBox1.Image), trackbarValue );
}

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)
Netherlands Netherlands
Doing that 'computer thing' ever since the C64.

Sometimes I feel that being a programmer is much like being a doctor: You just have to know everything and if you don't, something dies.

Either being an application or a patient.

Oddly enough, more people care about the death of their application, than the massacre of people...

Comments and Discussions

 
QuestionCustom background image Pin
Member 1190565126-Aug-15 19:01
Member 1190565126-Aug-15 19:01 

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.