■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); } }
|
|