フォームに線を引いた時の x, y の値を記憶させておくために
public List<PointF> linePoints1 = new List<PointF>(); public List<PointF> linePoints2 = new List<PointF>(); public List<PointF> linePoints3 = new List<PointF>();
と宣言しています。
でも下記のコードを実行すると全部同じ値になります。
コードの説明
下記の lineDrawfrm[3] は、Form です。3枚あってonDrawing = true の時、線を引けます。同時に1枚だけ。
線は、lineDrawfrmのフォームに引くのではなく別のフォームに書きます。
この時、lineDrawfrm[0]は、linePoints1、lineDrawfrm[1]は、linePoints2、lineDrawfrm[2]は、linePoints3
の各線の軌跡を保持しています。50個位の Point[x=0, y=0]・・・ みたいな値。
問題は、linePoints1.Add((PointF)m_position);した時、同時にlinePoints2、linePoints3にも同じ値がセットされます。
下記の通りグローバルな変数ですが独立して宣言しています。
linePoints1 に値をセットしたとき linePoints2、linePoints3 にも同じ値がセットされる理由がわかりません。
どうしたら回避できますか?
(下記のコードは一部割愛しています。MouseMove内のすべてが必要なら教えてください。)
VS2015 WinForm C# Windows10
C#
1 public List<PointF> linePoints1 = new List<PointF>(); 2 public List<PointF> linePoints2 = new List<PointF>(); 3 public List<PointF> linePoints3 = new List<PointF>(); 4 Point m_position; 5 6 : 7 8 private void m_frmdummy_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e) 9 { 10 if (e.Button == MouseButtons.Left && lineDrawfrm != null) 11 { 12 if (lineDrawfrm[nDrawingLineNumber - 1] == null) 13 return; 14 15 if (lineDrawfrm[nDrawingLineNumber - 1].drawing.onDrawing) 16 { 17 18 : 19 20 // 線を引いている 21 Point p = m_frmdummy.PointToClient(Cursor.Position); 22 23 Pen pen = new Pen(lineColor, 10); 24 Brush brsh = new SolidBrush(lineColor); 25 g.DrawLine(pen, m_position, p); 26 g.FillEllipse(brsh, p.X - pen.Width / 2, p.Y - pen.Width / 2, pen.Width, pen.Width); 27 28 m_position = p; 29 pen.Dispose(); 30 31 if (nDrawingLineNumber == 1) 32 linePoints1.Add((PointF)m_position); <- 問題はここ 33 if (nDrawingLineNumber == 2) 34 linePoints2.Add((PointF)m_position); 35 if (nDrawingLineNumber == 3) 36 linePoints3.Add((PointF)m_position); 37 38 : 39 }
回答1件
あなたの回答
tips
プレビュー