.NET 4.x Не получается победить Timer - C#
Формулировка задачи:
Заставил эллипс бегать к точке клика мыши, но вот остановить его движение - никак не получается.
Все варианты, типа "Timer.Stop()" и "Timer.Enable = false" перепробовал.. эллипс не поддаётся.
Доходя до нужной точки он трясётся как руки алкаша. Как заставить его замереть?
using System;
namespace MouseMove
{
public partial class Form1 : Form
{
double _x; //координаты эллипса
double _y; //координаты эллипса
double xM; //координаты мыши
double yM; //координаты мыши
double angle; //угол поворота
double speed; //скорость движения
public Form1()
{
InitializeComponent();
_x = 50;
_y = 50;
angle = 0;
speed = 30;
}
//Ищем угол между координатами сферы и курсора мыши
double GetAngle()
{
return Math.Atan2((_x - xM), (_y - yM));
}
public void Form1_Paint(object sender, PaintEventArgs e)
{
e.Graphics.FillEllipse(Brushes.Black, (int)_x, (int)_y, 100, 100); //рисуем эллипс
e.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias; //сглаживаем движение
}
//Таймер
public void tmrMoving_Tick(object sender, EventArgs e)
{
_x -= speed * Math.Sin(angle);
_y -= speed * Math.Cos(angle);
angle = GetAngle();
Invalidate();
}
//Событие Клик Мыши
public void Form1_MouseClick(object sender, MouseEventArgs e)
{
tmrMoving.Enabled = true;
xM = e.X;
yM = e.Y;
// Проверка не получается
// if (GetAngle() == 0) { tmrMoving.Enabled = false; }
}
}
}Решение задачи: «.NET 4.x Не получается победить Timer»
textual
Листинг программы
namespace WindowsFormsApplication
{
partial class MainForm
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
this.RenderingTimer = new System.Windows.Forms.Timer(this.components);
this.SuspendLayout();
//
// RenderingTimer
//
this.RenderingTimer.Interval = 200;
this.RenderingTimer.Tick += new System.EventHandler(this.RenderingTimer_Tick);
//
// MainForm
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(284, 262);
this.DoubleBuffered = true;
this.Name = "MainForm";
this.Text = "Form";
this.Paint += new System.Windows.Forms.PaintEventHandler(this.MainForm_Paint);
this.MouseClick += new System.Windows.Forms.MouseEventHandler(this.MainForm_MouseClick);
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.Timer RenderingTimer;
}
}