Usage of a TrackBar as a ToolStripMenuItem





0/5 (0 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....
///
/// 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 );
}