Download latest version from Github

Resource to add a graphics-based random animated wheel to any form.
Spin the wheel, select the winner.
This plugin was created for use with the Picket application. However, I decided to extend the usage and provide a detailed interface with multiple options. This wheel can be customized and used with any Control. Please remember to give credit if using my code within your applications.
To Use
Four simple steps.
- Create the wheel object.
- Add Entries to the list.
- Draw the wheel.
- Spin the wheel.
This example form shows nearly all options available in the interface.

When initializing the Wheel, any control can be used as the Parent.
// Link the wheel to a form. IRandomTool wheel = new Wheel(this); // Or link the wheel to a control. IRandomTool wheel = new Wheel(label1);
Draw
// Use the Top Left Location and Radius. wheel.Draw(LocationX, LocationY, Radius); // Or use the Circle's center and Radius. wheel.Draw(CenterPoint, Radus); // Refresh calls Draw using the existing location data. wheel.Refresh();
EntryList
// List of 'Entries' used for the wheel. wheel.EntryList; // Entry type contains a UniqueID(optional), Name, and Color. // Returns a unique ticket ID that can optionally be set in the Entry. wheel.EntryAdd(Entry); // Remove uses an ID provided by EntryAdd. wheel.EntryRemove(UniqueID); // Clear the EntryList. wheel.EntriesClear(); // Randomize the EntryList. wheel.ShuffleEntries();
Action
// Returns true if the wheel is actively spinning. wheel.IsBusy; // Begin the spinning animation and random list pick. // Uses preset or default settings. wheel.Start(); // Or begin and set spin direction, spin type, and strength. wheel.Start(animDirection, randPowerType, randStrength); /* 'animDirection' can be Clockwise or CoutnerClockwise. 'randPowerType' can be Infinite, Weak, Average, Strong, Super, Random, or Manual. 'randStrength' is only used if 'randPowerType' is Manual. */ // Manually stop the picker and cancel the random pick. wheel.Stop(); // If 'randPowerType' is Infinite, then Stop will slow the picker and still select randomly from the list.
Other
// Public function used to determine text color against the background. wheel.IsReadable(Color1, Color2); // Brings the PictureBox control to the front of the form. wheel.BringToFront(); // Sends the PictureBox control to the back of the form. wheel.SendToBack(); // Disposes of Image and PictureBox data. // Must create a new wheel object after this is called. wheel.Dispose();
Event Handlers
// This event is called each frame the wheel is moved. // Entry returned is the currently selected entry on the wheel. ToolActionEventHandler(Entry, string[4] actionInfo) /* The string array provided is a 4 part array. Example return values in quotes: Total Angles to turn. "1672" Current Angle. "1671.018" Current base speed adjustment. "-0.9000244" Spin Strength. "Random|4" */ // This event is called when the wheel comes to a stop. //Entry returned is the final selected Entry. ToolStopEventHandler(Entry)
Settings
// If false, actions will return null instead of throwing an Exception. wheel.AllowExceptions = true; // Contains all other wheel settings. wheel._ToolProperties; // See below section for all _ToolProperties settings:
_ToolProperties
wheel._ToolProperties.ArrowPosition wheel._ToolProperties.ArrowImage wheel._ToolProperties.LineColor wheel._ToolProperties.LineWidth wheel._ToolProperties.ForceUniqueEntryColors wheel._ToolProperties.TextToShow wheel._ToolProperties.TextColor wheel._ToolProperties.TextColorAuto wheel._ToolProperties.TextFontFamily wheel._ToolProperties.TextFontStyle wheel._ToolProperties.ShadowVisible wheel._ToolProperties.ShadowColor wheel._ToolProperties.ShadowPosition wheel._ToolProperties.ShadowLength wheel._ToolProperties.CenterVisible wheel._ToolProperties.CenterColor wheel._ToolProperties.CenterSize
Please feel free to view the source code over at GitHub. Completely available. Let me know if you have any questions or concerns. And please share with your friends!