I am making a winforms application. One of the features I hope to implement is a rotating gear on the home form.
When the home form is loaded, you should hover over the picture of the gear, and it should rotate in place.
But all I have so far is the RotateFlip and that just flips the picture.
Is there a way to make the gear turn in place when the mouse is hovering over it?
The code I have so far is:
Bitmap bitmap1;
public frmHome()
{
InitializeComponent();
try
{
bitmap1 = (Bitmap)Bitmap.FromFile(@"gear.jpg");
gear1.SizeMode = PictureBoxSizeMode.AutoSize;
gear1.Image = bitmap1;
}
catch (System.IO.FileNotFoundException)
{
MessageBox.Show("There was an error." +
"Check the path to the bitmap.");
}
}
private void frmHome_Load(object sender, EventArgs e)
{
System.Threading.Thread.Sleep(5000);
}
private void frmHome_FormClosed(object sender, FormClosedEventArgs e)
{
Application.Exit();
}
private void pictureBox1_MouseHover(object sender, EventArgs e)
{
bitmap1.RotateFlip(RotateFlipType.Rotate180FlipY);
gear1.Image = bitmap1;
}
Like I said, I just want to turn the gear. I am trying to do this in a Windows Form application. Using C#. Framework 4
You'll have to use Timer
to create rotation of the Image
. There is no built in method exists for rotation.
Create a global timer:
Timer rotationTimer;
Initialize timer in the constructor of the form and create PictureBox
MouseEnter
and MouseLeave
events:
//initializing timer
rotationTimer = new Timer();
rotationTimer.Interval = 150; //you can change it to handle smoothness
rotationTimer.Tick += rotationTimer_Tick;
//create pictutrebox events
pictureBox1.MouseEnter += pictureBox1_MouseEnter;
pictureBox1.MouseLeave += pictureBox1_MouseLeave;
Then create their Event Handlers
:
void rotationTimer_Tick(object sender, EventArgs e)
{
Image flipImage = pictureBox1.Image;
flipImage.RotateFlip(RotateFlipType.Rotate90FlipXY);
pictureBox1.Image = flipImage;
}
private void pictureBox1_MouseEnter(object sender, EventArgs e)
{
rotationTimer.Start();
}
private void pictureBox1_MouseLeave(object sender, EventArgs e)
{
rotationTimer.Stop();
}