前提・実現したいこと
現在、Windowsフォームアプリケーションを開発しています。
コード記述のプログラミング言語はC#です。
今の時点で実現できていることは直線の始点を左クリックして、もう一度左クリックすることで終点を決め、その二点を結ぶ直線を描くことはできています。
DrawLineメソッドです。
pictureBox内に表示させています。
実装したいこと
直線を一つ描画はできるのですが、線と線をつないで図形を描きたい場合など複数描ける必要があります。
しかし、同記述していけばいいかわからなかったので、どなたか助けていただけないでしょうか?
以下がソースコードです。
発生している問題・エラーメッセージ
using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using static System.Console;
public partial class Form1 : Form
{
/// <summary> /// 各変数の定義など /// </summary> //描画する線の種類のボタンがクリックされた場合の機能を実装するためのスイッチON/OFFを観察するための変数 private bool btnSolidWasClicked = false;
//左クリックで始点(lsp)と終点(lep)を選択するために変数定義
//MouseButtons.Left
private Point lsp = new Point();
private Point lep = new Point();
//左クリックされたときにtrueかfalseかどうかで始点か終点か判断
private Boolean lsp_flag;
private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{
if (btnSolidWasClicked )
{
//描画先とするImageオブジェクトを作成
Bitmap canvas = new Bitmap(pictureBox1.Width, pictureBox1.Height);
//ImageオブジェクトのGraphicsオブジェクトを作成
Graphics g = Graphics.FromImage(canvas);
//線を滑らかにする
g.SmoothingMode = SmoothingMode.AntiAlias;
//Penオブジェクトの作成
Pen GreenPen = new Pen(Color.White, 3);
//直線の種類は実線 GreenPen.DashStyle = DashStyle.Solid; //座標の表示 label1.Text = string.Format("Screen Position : {0:d}, {1:d}", Cursor.Position.X, Cursor.Position.Y); if (lsp_flag) //終点の処理 { lep = e.Location; g.DrawLine(GreenPen, lsp, lep); //リソースを開放 GreenPen.Dispose(); g.Dispose(); lsp_flag = false; //Picture1に表示 pictureBox1.Image = canvas; } else //始点の処理 { lsp = e.Location; g.DrawRectangle(GreenPen, lsp.X, lsp.Y, 0.1f, 0.1f); //リソースを開放 GreenPen.Dispose(); g.Dispose(); lsp_flag = true; //Picture1に表示 pictureBox1.Image = canvas; } }
}
}
試したこと
始点の処理と終点の処理を分けて書こうと思い、始点をMouseDownイベント、終点の処理をMouseUpイベントで書きましたがうまくいきませんでした。
現在はすべてMouseDownイベント内に書いています。
補足情報(FW/ツールのバージョンなど)
開発環境 Visual studio2019 community edition
C# windows form application
回答4件
あなたの回答
tips
プレビュー