質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

解決済

3回答

1631閲覧

C#

seep0619

総合スコア25

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

0クリップ

投稿2016/10/05 05:39

編集2016/10/07 01:17

C#について解決いたしました。本当に助かりました。またどうぞ宜しくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kei344

2016/10/07 02:00

回答が付いた質問の編集は慎重に行ってください。タイプミス程度なら修正する事もありますが、本文を削除するのはやめましょう。過去の投稿を表示できるので、それを使って記事を復元してください。https://teratail.com/questions/history-questions/50360
guest

回答3

0

ベストアンサー

抽出結果が複数あるので、描画するだけです
ただ、このコードだとマウス座標が変わる度に
検索&描画を行う為、四角の数が増えると重くなると思います
要改善です

C#

1using System; 2using System.Collections.Generic; 3using System.Data; 4using System.Drawing; 5using System.Linq; 6using System.Windows.Forms; 7 8namespace WindowsFormsApplication1 9{ 10 public partial class Form1 : Form 11 { 12 // 四角形の座標List 13 List<Rectangle> _rects = new List<Rectangle>(); 14 15 // 赤枠になっている四角形の座標配列 16 Rectangle[] _prev = new Rectangle[0]; 17 18 public Form1() 19 { 20 InitializeComponent(); 21 } 22 23 private void Form1_Load(object sender, EventArgs e) 24 { 25 Bitmap canvas = new Bitmap(pictureBox1.Width, pictureBox1.Height); 26 27 using (Graphics g = Graphics.FromImage(canvas)) 28 using (Pen pen = new Pen(Color.Blue)) 29 { 30 Random rnd = new Random(); 31 32 // 400個の四角形を作成 33 for (int i = 0; i < 400; i++) 34 { 35 int x = rnd.Next(0, canvas.Width - 100); 36 int y = rnd.Next(0, canvas.Height - 100); 37 Rectangle r = new Rectangle(x, y, 100, 100); 38 39 // 四角形描画 40 g.DrawRectangle(pen, r); 41 42 // 座標をListへ追加 43 _rects.Add(r); 44 } 45 } 46 47 pictureBox1.Image = canvas; 48 } 49 50 private void pictureBox1_MouseMove(object sender, MouseEventArgs e) 51 { 52 // カーソル座標にある四角形を全て抽出 53 Rectangle[] hitRects = _rects.AsEnumerable() 54 .Where(v => 55 v.X <= e.X && v.Y <= e.Y && 56 (v.X + v.Width) >= e.X && (v.Y + v.Height) >= e.Y) 57 .Select(v => v) 58 .ToArray(); 59 60 using (Graphics g = Graphics.FromImage(pictureBox1.Image)) 61 { 62 // 前回描画した赤枠を青枠に戻す 63 if (_prev.Length > 0) 64 { 65 using (Pen pen = new Pen(Color.Blue)) 66 { 67 g.DrawRectangles(pen, _prev); 68 } 69 } 70 71 // 抽出結果が1個以上あれば描画開始 72 if (hitRects.Length > 0) 73 { 74 using (Pen pen = new Pen(Color.Red)) 75 { 76 // 赤枠四角描画 77 g.DrawRectangles(pen, hitRects); 78 } 79 } 80 81 // 今回描画した赤枠座標を保存 82 _prev = hitRects; 83 84 // PictureBox更新 85 pictureBox1.Refresh(); 86 } 87 } 88 } 89}

投稿2016/10/06 03:27

編集2016/10/06 08:59
dn315

総合スコア201

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

seep0619

2016/10/07 01:17

なるほどです!!納得いたしました。素晴らしいです。ご回答有難うございます。
guest

0

こんなんでどうでしょうか?

C#

1using System; 2using System.Collections.Generic; 3using System.Data; 4using System.Drawing; 5using System.Linq; 6using System.Windows.Forms; 7 8namespace WindowsFormsApplication1 9{ 10 public partial class Form1 : Form 11 { 12 List<Rectangle> _rects = new List<Rectangle>(); 13 Rectangle _prev = default(Rectangle); 14 15 public Form1() 16 { 17 InitializeComponent(); 18 } 19 20 private void Form1_Load(object sender, EventArgs e) 21 { 22 Bitmap canvas = new Bitmap(pictureBox1.Width, pictureBox1.Height); 23 24 using (Graphics g = Graphics.FromImage(canvas)) 25 using (Pen pen = new Pen(Color.Blue)) 26 { 27 Random rnd = new Random(); 28 29 for (int i = 0; i < 10; i++) 30 { 31 int x = rnd.Next(0, canvas.Width - 100); 32 int y = rnd.Next(0, canvas.Height - 100); 33 Rectangle r = new Rectangle(x, y, 100, 100); 34 35 g.DrawRectangle(pen, r); 36 _rects.Add(r); 37 } 38 } 39 40 pictureBox1.Image = canvas; 41 } 42 43 private void pictureBox1_MouseMove(object sender, MouseEventArgs e) 44 { 45 List<Rectangle> hitRects = _rects.AsEnumerable() 46 .Where(v => 47 v.X <= e.X && v.Y <= e.Y && 48 (v.X + v.Width) >= e.X && (v.Y + v.Height) >= e.Y) 49 .Select(v => v) 50 .ToList(); 51 52 if(hitRects.Count > 0) 53 { 54 using (Graphics g = Graphics.FromImage(pictureBox1.Image)) 55 { 56 if (_prev != default(Rectangle)) 57 { 58 using (Pen pen = new Pen(Color.Blue)) 59 { 60 g.DrawRectangle(pen, _prev); 61 } 62 } 63 64 using (Pen pen = new Pen(Color.Red)) 65 { 66 g.DrawRectangle(pen, hitRects[0]); 67 } 68 } 69 70 _prev = hitRects[0]; 71 pictureBox1.Refresh(); 72 } 73 } 74 } 75} 76

投稿2016/10/05 09:19

編集2016/10/05 09:30
dn315

総合スコア201

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

seep0619

2016/10/07 01:18 編集

こんにちは。 ご回答有難うございます!! 感動いたしました! 本当に有難うございます。
guest

0

Form1_Load()内のコードは何がしたいのでしょう??
もっとピンポイントで質問した方が
解答を得られやすいかと思います。

投稿2016/10/05 08:11

dn315

総合スコア201

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問