Мне просто интересно, можете ли вы помочь мне с этой проблемой.Как перерисовать линию, используя значения из trackBar в реальном времени?
В моей программе я должен использовать событие paint, чтобы нарисовать линию, которая действует как «башня». Я должен использовать трекбор, чтобы выбрать угол, на котором я буду «стрелять» этой башней. Моя проблема заключается в том, что я не уверен, как закодировать его так, чтобы линия «Турель» перерисовывалась каждый раз при изменении значения в трекбаре. Я попробовал использовать Refresh(), который позволил линии рисоваться в реальном времени, но это заставило форму мерцать черно-белым и перерисовать линию под разными углами к тому, что было выбрано.
Любая помощь была бы принята с благодарностью. Благодаря!
Вот скриншот формы, из приведенного ниже кода, работающего в Visual Basic 2010
public partial class Form1 : Form
{
double xEnd = 0;
double yEnd = 0;
double xOrigin = 30;
double yOrigin = 450;
double xHor = 30;
double yHor = 350;
double xVert = 130;
double yVert = 450;
double lineLength = 100;
public Form1()
{
xEnd = xOrigin + lineLength;
yEnd = yOrigin;
InitializeComponent();
}
private void LineDrawEvent(object sender, PaintEventArgs paint)
{
Graphics drawSurface = paint.Graphics;
Pen turretLine = new Pen(Color.Blue);
Pen graphHorizontal = new Pen(Color.Red);
Pen graphVertical = new Pen(Color.Red);
Pen firedLine = new Pen(Color.Blue);
drawSurface.DrawLine(graphVertical, (int)xOrigin, (int)yOrigin, (int)xHor, (int)yHor);
drawSurface.DrawLine(graphHorizontal, (int)xOrigin, (int)yOrigin, (int)xVert, (int)yVert);
double angleInRadians = ConvertDegsToRads((double)trckBarAngle.Value);
xEnd = xOrigin + lineLength * Math.Cos(angleInRadians);
yEnd = yOrigin - lineLength * Math.Sin(angleInRadians);
drawSurface.DrawLine(turretLine, (int)xOrigin, (int)yOrigin, (int)xEnd, (int)yEnd);
}
private void trckBarAngle_Scroll(object sender, EventArgs e)
{
lblAngle.Text = "Angle is:" + Convert.ToString((double)trckBarAngle.Value/2);
}
private double ConvertDegsToRads(double degrees)
{
return degrees * (Math.PI/180.0);
}
}
Форма.DoubleBuffered = true. – TaW
Я изменил это в свойствах форм, но, к сожалению, это не изменило ситуацию. Что именно должно было измениться? Я новичок в C#, так что извините за вопросы noob. –
Он должен остановить мерцание. – TaW