65.9K
CodeProject is changing. Read more.
Home

Usage of a TrackBar as a ToolStripMenuItem

emptyStarIconemptyStarIconemptyStarIconemptyStarIconemptyStarIcon

0/5 (0 vote)

Nov 1, 2011

CPOL
viewsIcon

9929

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....
/// 
/// Custom event arguments class so we can push the value of the trackbar
/// to any interested subscribers.
/// 
public class TrackBarEventArgs: EventArgs
{
   /// 
   /// The new value of the trackbar.
   /// 
   public int NewValue {get;set;}
}
[System.ComponentModel.DesignerCategory("code")]
        [ToolStripItemDesignerAvailability(ToolStripItemDesignerAvailability.ContextMenuStrip | ToolStripItemDesignerAvailability.MenuStrip)]
        public partial class ToolStripMenuItem : ToolStripControlHost
        {
            public ToolStripMenuItem()
                : base(CreateControlInstance())
            {
            }
            /// 
            /// Create a strongly typed property called TrackBar - handy to prevent casting everywhere.
            /// 
            public TrackBar TrackBar
            {
                get
                {
                    return Control as TrackBar;
                }
            }
            /// 
            /// Create the actual control, note this is static so it can be called from the
            /// constructor.
            ///
            /// 
            /// 
            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; }
            }
            /// 
            /// Attach to events we want to re-wrap
            /// 
            /// 
            protected override void OnSubscribeControlEvents(Control control)
            {
                base.OnSubscribeControlEvents(control);
                TrackBar trackBar = control as TrackBar;
                // you can ommit the delegate creation:
                trackBar.ValueChanged += trackBar_ValueChanged;
            }
            /// 
            /// Detach from events.
            /// 
            /// 
            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;
            }
            /// 
            /// Routing for event
            /// TrackBar.ValueChanged -> ToolStripTrackBar.ValueChanged
            /// 
            /// 
            /// 
            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 ValueChanged;

            // set other defaults that are interesting
            protected override Size DefaultSize
            {
                get
                {
                    return new Size(200, 16);
                }
            }
       } 
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 );
        }