2

この問題を解決するのを手伝ってもらえないかと思っていました。

私のプログラムでは、ペイント イベントを使用して、「タレット」として機能する線を描画する必要があります。このタレットを「発射」する角度を選択するには、トラックバーを使用する必要があります。私の問題は、トラックバーの値が変更されるたびに「タレット」ラインが再描画されるようにコーディングする方法がわからないことです。線をリアルタイムで描画できる 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);
            }
        }
4

1 に答える 1