C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Chartコントロール上に四角形を描画する方法

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■84645 / inTopicNo.1)  Chartコントロール上に四角形を描画する方法
  
□投稿者/ たま (7回)-(2017/07/25(Tue) 12:19:14)

分類:[.NET 全般] 

はじめまして

Chartコントロールを使用してグラフのを描画した後、
マウスをドラッグして指定した範囲を拡大表示する
プログラムを作成していて、拡大範囲選択中に現在
選択されている範囲を示す四角形を描画したいと
考えましたが、どの様にすれば良いか分かりません。

下記のurlの方は私が実現したい事とほぼ同じことをされて
いるのですが、Pictureboxで実現されておりこれをChart
コントロールで実現するにはどの様にしたら良いか分かり
ません。
どなたかお分かりになる方がいらっしゃいましたら、
ご教授頂けると幸いです。
宜しくお願い致します。

[参考サイトURL]
http://authorunknown408.blog.fc2.com/blog-entry-10.html
引用返信 編集キー/
■84655 / inTopicNo.2)  Re[1]: Chartコントロール上に四角形を描画する方法
□投稿者/ shu (1039回)-(2017/07/25(Tue) 17:25:00)
No84645 (たま さん) に返信

これでチャート上に四角を描画できるので後は座標を調整すればよいです。


    Private Sub Chart1_PostPaint(sender As Object, e As ChartPaintEventArgs) Handles Chart1.PostPaint
        Dim cg = e.ChartGraphics()
        Dim g = cg.Graphics
        g.DrawRectangle(Pens.Blue, 100, 100, 50, 50)
    End Sub

引用返信 編集キー/
■84657 / inTopicNo.3)  Re[2]: Chartコントロール上に四角形を描画する方法
□投稿者/ たま (9回)-(2017/07/25(Tue) 21:27:01)
No84655 (shu さん) に返信
> ■No84645 (たま さん) に返信
>
> これでチャート上に四角を描画できるので後は座標を調整すればよいです。
>
>
> Private Sub Chart1_PostPaint(sender As Object, e As ChartPaintEventArgs) Handles Chart1.PostPaint
> Dim cg = e.ChartGraphics()
> Dim g = cg.Graphics
> g.DrawRectangle(Pens.Blue, 100, 100, 50, 50)
> End Sub
>

返信が遅くなってしまい、申し訳ありません。
私の記載内容が不足しているなか、推測して回答をいただき
ありがとうございます。

ただ、実際にやりたい事と少し違っていましたので、情報を
追加させて頂き、もし何かが実現方法をご存知であれば、
ご教授頂けると幸いです。

[実現させたい事]
1.マウスの左ボタンをクリックした状態でマウスを動かすと
四角形が表示される
2.上記の状態でマウスを動かし続けると、それに合わせて、
四角形の形が伸び縮みする
※イメージとしては、デスクトップで複数のアイコンを
選択する際に、選択範囲を示す四角形のイメージです
3.範囲を決定し、マウスの左ボタンを離すと、四角形は
消える

[開発環境]
OS:Windows7
環境:Visual studio 2017
開発言語:C#

お手数をおかけします。
宜しくお願い致します。
引用返信 編集キー/
■84658 / inTopicNo.4)  Re[3]: Chartコントロール上に四角形を描画する方法
□投稿者/ 魔界の仮面弁士 (1358回)-(2017/07/26(Wed) 00:16:00)
No84657 (たま さん) に返信
> ただ、実際にやりたい事と少し違っていましたので、

「少し違う」というのは、具体的にはどの点でしょうか?

PostPaint イベントで描画するという方針は変わらないので
本質的には同じ事かと思いますが…。


PostPaint での描画については、ひとまず
過去ログ No82084 からのスレッドが参考になるかもしれません。
http://bbs.wankuma.com/index.cgi?mode=al2&namber=82084&KLOG=140

言語が C# なのか VB なのかという点については、
当初の質問で [C#] や [VB.NET/VB2005以降] ではなく、
[.NET 全般]が選択されていたので已む無しということで。


> 1.マウスの左ボタンをクリックした状態でマウスを動かすと
> 四角形が表示される
> 2.上記の状態でマウスを動かし続けると、それに合わせて、
> 四角形の形が伸び縮みする
> ※イメージとしては、デスクトップで複数のアイコンを
> 選択する際に、選択範囲を示す四角形のイメージです
> 3.範囲を決定し、マウスの左ボタンを離すと、四角形は
> 消える

ドラッグ描画なら、MouseDown/Up 時の座標を覚えておき、
その間の MouseMove 時に描画を施せば良いかと思います。
http://bbs.wankuma.com/index.cgi?mode=al2&namber=60074&KLOG=101


上記の過去ログ No60074 を元に焼き直しでみたものがこちら。


Point? pos;
Rectangle rect;
private void chart1_MouseDown(object sender, MouseEventArgs e)
{
  if (e.Button.HasFlag(MouseButtons.Left))
  {
    pos = e.Location;
  }
}

private void chart1_MouseMove(object sender, MouseEventArgs e)
{
  if (pos != null)
  {
    Point a = pos.Value;
    Point b = e.Location;
    rect = Rectangle.FromLTRB(
      Math.Min(a.X, b.X), Math.Min(a.Y, b.Y),
      Math.Max(a.X, b.X), Math.Max(a.Y, b.Y));
    chart1.Invalidate();
  }
}
private void chart1_MouseUp(object sender, MouseEventArgs e)
{
  chart1.Invalidate();
  pos = null;
}

private void chart1_PostPaint(object sender, System.Windows.Forms.DataVisualization.Charting.ChartPaintEventArgs e)
{
  if (pos != null)
  {
    // using (var b = new SolidBrush(Color.FromArgb(32, SystemColors.HotTrack)))
    // {
    //   e.ChartGraphics.Graphics.FillRectangle(b, rect);
    //   e.ChartGraphics.Graphics.DrawRectangle(SystemPens.HotTrack, rect);
    // }
    ControlPaint.DrawFocusRectangle(e.ChartGraphics.Graphics, rect);
  }
}
引用返信 編集キー/
■84664 / inTopicNo.5)  Re[4]: Chartコントロール上に四角形を描画する方法
□投稿者/ たま (10回)-(2017/07/26(Wed) 12:18:35)
返信が遅くなり申し訳ありません。
ご回答ありがとうございます。
まさしく、実現させたいことができました。

> 「少し違う」というのは、具体的にはどの点でしょうか?
>
> PostPaint イベントで描画するという方針は変わらないので
> 本質的には同じ事かと思いますが…。
参考にさせて頂いていたプログラムでは、マウスのボタンを離した際に、
四角形が確定されて描画されますが、私が実現したかったことは、ご提供
頂いたサンプルの様にマウスのボタンを離した際に四角形が消えるという
動作のことを指しておりました。

> 言語が C# なのか VB なのかという点については、
> 当初の質問で [C#] や [VB.NET/VB2005以降] ではなく、
> [.NET 全般]が選択されていたので已む無しということで。
はい。
今後は環境や分類の記載・選択漏れがない様にいたします。

本当にありがとうございました。
解決済み
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ