Click here to Skip to main content
65,938 articles
CodeProject is changing. Read more.
Articles / Languages / C#

Usage of a TrackBar as a ToolStripMenuItem

0.00/5 (No votes)
1 Nov 2011CPOL 9.9K  
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)