Click here to Skip to main content
Click here to Skip to main content
Alternative Tip

Tagged as

Usage of a TrackBar as a ToolStripMenuItem

, 1 Nov 2011
Rate this:
Please Sign up or sign in to vote.
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....
 
/// <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;}
}
 
[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:
 
         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)

Share

About the Author

Kabwla.Phone
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 appliction or a patient.
Oddly enough, more people care about the death of their application, than the massacre op people...

Comments and Discussions

 
-- There are no messages in this forum --
| Advertise | Privacy | Mobile
Web02 | 2.8.140827.1 | Last Updated 1 Nov 2011
Article Copyright 2011 by Kabwla.Phone
Everything else Copyright © CodeProject, 1999-2014
Terms of Service
Layout: fixed | fluid