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

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

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

Re[5]: Chartでマウスと共に移動する十字線


(過去ログ 131 を表示中)

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

■77274 / inTopicNo.1)  Chartでマウスと共に移動する十字線
  
□投稿者/ ゆい (1回)-(2015/10/02(Fri) 21:28:22)

分類:[.NET 全般] 

開発環境:Windows7
使用言語:VB2010

場違いでしたらすみません。
サンプルプログラムを教えていただきながら自分の要るものだけを作っている初心者です。
Chartでマウスと共に移動する十字線(x軸とy軸が交差する罫線)引きたいのですが難しいでしょうか。難しければ諦めます。
既に Graphics.DrawLine(Pens.Gold, x1, CInt(y1), x1, CInt(y2)) などとして罫線を引いてますので影響しない方法でお願いします。


引用返信 編集キー/
■77297 / inTopicNo.2)  Re[1]: Chartでマウスと共に移動する十字線
□投稿者/ ぶなっぷ (53回)-(2015/10/06(Tue) 10:04:31)
そこまで分かっているなら、何が分からないのかが分かりません

MouseMoveのイベントハンドラを作って、DrawLine()すればいいだけです。

引用返信 編集キー/
■77310 / inTopicNo.3)  Re[2]: Chartでマウスと共に移動する十字線
□投稿者/ ゆい (2回)-(2015/10/06(Tue) 23:04:52)
No77297 (ぶなっぷ さん) に返信

ありがとうございます。

私のレベルではこんな感じかな? と思ったのですがこれでは、
'ChartGraphics' は 'System.Windows.Forms.MouseEventArgs' のメンバーではありません。
のエラー出てしまいます(^^;

    Private Sub Chart1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Chart1.MouseMove 
        If Chart1.ChartAreas(0).AxisY.Minimum > 0 And Chart1.ChartAreas(0).AxisY.Maximum > 0 Then  
            Dim axx = Chart1.ChartAreas(0).AxisX
            Dim axy = Chart1.ChartAreas(0).AxisY
            Dim x1 = axx.ValueToPixelPosition(axx.Minimum)  'グラフ領域右端のX座標
            Dim y1 = axy.ValueToPixelPosition(axy.Maximum)  'グラフ領域上部のY座標
            Dim x2 = axx.ValueToPixelPosition(axx.Maximum)  'グラフ領域左端のX座標
            Dim y2 = axy.ValueToPixelPosition(axy.Minimum)  'グラフ領域下部のY座標
            e.ChartGraphics.Graphics.DrawLine(Pens.Gold, x1, CInt(y1), x1, CInt(y2))
            e.ChartGraphics.Graphics.DrawLine(Pens.Gold, y1, CInt(x1), y1, CInt(x2))
        End If
    End Sub

引用返信 編集キー/
■77313 / inTopicNo.4)  Re[3]: Chartでマウスと共に移動する十字線
□投稿者/ よもやま (4回)-(2015/10/07(Wed) 09:37:26)
No77310 (ゆい さん) に返信
> ■No77297 (ぶなっぷ さん) に返信
> 
> ありがとうございます。
> 
> 私のレベルではこんな感じかな? と思ったのですがこれでは、
> 'ChartGraphics' は 'System.Windows.Forms.MouseEventArgs' のメンバーではありません。
> のエラー出てしまいます(^^;
> 
>     Private Sub Chart1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Chart1.MouseMove 
>         If Chart1.ChartAreas(0).AxisY.Minimum > 0 And Chart1.ChartAreas(0).AxisY.Maximum > 0 Then  
>             Dim axx = Chart1.ChartAreas(0).AxisX
>             Dim axy = Chart1.ChartAreas(0).AxisY
>             Dim x1 = axx.ValueToPixelPosition(axx.Minimum)  'グラフ領域右端のX座標
>             Dim y1 = axy.ValueToPixelPosition(axy.Maximum)  'グラフ領域上部のY座標
>             Dim x2 = axx.ValueToPixelPosition(axx.Maximum)  'グラフ領域左端のX座標
>             Dim y2 = axy.ValueToPixelPosition(axy.Minimum)  'グラフ領域下部のY座標
>             e.ChartGraphics.Graphics.DrawLine(Pens.Gold, x1, CInt(y1), x1, CInt(y2))
>             e.ChartGraphics.Graphics.DrawLine(Pens.Gold, y1, CInt(x1), y1, CInt(x2))
>         End If
>     End Sub

MouseEventArgsクラスに”ChartGraphics”がないためですが。。
https://msdn.microsoft.com/ja-jp/library/system.windows.forms.mouseeventargs(v=vs.100).aspx

Chart1(Chartコントロール?)には"ChartGraphics.Graphics.DrawLine"できるのでしょうか。

引用返信 編集キー/
■77316 / inTopicNo.5)  Re[1]: Chartでマウスと共に移動する十字線
□投稿者/ WebSurfer (668回)-(2015/10/07(Wed) 12:09:47)
No77274 (ゆい さん) に返信

質問の文中に Graphics.DrawLine とあるので Windows Forms アプリを作っていると
想像して・・・

#何を作っているか (ASP.NET Web Forms? Windows Forms?) ぐらいは最初の質問に
 書いてください。それによって話が違ってきますので。回答者の想像に期待しない
 でください。想像が違っていると混乱を招くばかりですので。

> Chartでマウスと共に移動する十字線(x軸とy軸が交差する罫線)引きたいのですが
> 難しいでしょうか。

「マウスと共に移動」はできませんが、Chart 上をクリックすると、クリックしたポイ
ントに十字線を移動させ、その座標を取得することは既存の Chart の機能で可能です。

そのデモおよびコードは、以下のサイトから C# で書いた Windows Forms のサンプルを
入手できるので、それをダウンロードしてください。(それ無しで開発はできないと言
っても過言ではないと思いますので是非やってください)

Samples Environments for Microsoft Chart Controls
https://code.msdn.microsoft.com/mschart

Windows Forms のサンプルは上記のページで[C# (5.6MB)]をクリックするとダウン
ロードできます。

「Samples Environments for Microsoft Chart Controls.zip」という名前の zip
ファイルの中の「Windows Forms Samples Environment for Microsoft Chart
Controls\C#」というフォルダに完全なソリューションとしてサンプルが含まれて
いるはずです。

それを適当なフォルダに解凍して Visual Studio(.NET4 なので 2010 以降のバージョ
ン)で開いて実行してみてください。

基本の解説、いろいろなタイプのサンプルのデモ、それを作るための C# および VB.NET
サンプルコード等が満載の Windows Forms アプリが動くはずです。

十字線のデモは、そのアプリを起動して右上の[Contents]タブをクリックし、その中の
[Chart Features] ⇒[Customization and Events]⇒[CursorPositionChanged Event]
を見てください。


【注】

Windows Forms アプリのサンプルは、ソリューションのフォルダ名が zip を解凍したと
きのままですと C# と言う名前になっていると思います。具体的には以下通り。

C:\ ... \Windows Forms Samples Environment for Microsoft Chart Controls\C#

これをそのままソリューションのフォルダとして使う場合は、フォルダ名 C# を CSharp
などに書き換えないとうまく動かないようですでご注意ください。(最後が # で終わる
のは不可)

引用返信 編集キー/
■77317 / inTopicNo.6)  Re[1]: Chartでマウスと共に移動する十字線
□投稿者/ Jitta from iPhone (2回)-(2015/10/07(Wed) 13:18:01)
No77274 (ゆい さん) に返信
> 開発環境:Windows7
> 使用言語:VB2010
>
> 場違いでしたらすみません。
> サンプルプログラムを教えていただきながら自分の要るものだけを作っている初心者です。
> Chartでマウスと共に移動する十字線(x軸とy軸が交差する罫線)引きたいのですが難しいでしょうか。難しければ諦めます。
> 既に Graphics.DrawLine(Pens.Gold, x1, CInt(y1), x1, CInt(y2)) などとして罫線を引いてますので影響しない方法でお願いします。
>
>

「ラバーバンド」で検索
じゃないかなぁ?
引用返信 編集キー/
■77320 / inTopicNo.7)  Re[3]: Chartでマウスと共に移動する十字線
□投稿者/ ぶなっぷ (56回)-(2015/10/07(Wed) 14:45:10)
2015/10/07(Wed) 14:45:27 編集(投稿者)
引数
  ByVal e As System.Windows.Forms.MouseEventArgs
の e が属するMouseEventArgsクラスには、ChartGraphicsというメンバはいません。
エラーになるのは当たり前です。
基本ですが、大丈夫ですか?

何らかの方法で、Chartから Graphicsオブジェクトを引っ張ってくる必要があります。
Windows Formsに詳しくないもので正確なことは言えませんが、、、
  Fromなんちゃら()
とかいうメソッドで引っ張ってくるんじゃないかな?

引用返信 編集キー/
■77321 / inTopicNo.8)  Re[2]: Chartでマウスと共に移動する十字線
□投稿者/ shu (783回)-(2015/10/07(Wed) 15:01:42)
こんなんでどうでしょう?

    Private _mp As Point
    Private Sub Chart1_MouseMove(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles Chart1.MouseMove
        _mp = e.Location
        Chart1.Invalidate()
    End Sub

    Private Sub Chart1_PostPaint(sender As Object, e As System.Windows.Forms.DataVisualization.Charting.ChartPaintEventArgs) Handles Chart1.PostPaint
        Dim g = e.ChartGraphics.Graphics

        '---> 既存の処理
        '<--- 既存の処理

        Dim axx = Chart1.ChartAreas(0).AxisX
        Dim axy = Chart1.ChartAreas(0).AxisY
        Dim x1 = axx.ValueToPixelPosition(axx.Minimum)  'グラフ領域右端のX座標
        Dim y1 = axy.ValueToPixelPosition(axy.Maximum)  'グラフ領域上部のY座標
        Dim x2 = axx.ValueToPixelPosition(axx.Maximum)  'グラフ領域左端のX座標
        Dim y2 = axy.ValueToPixelPosition(axy.Minimum)  'グラフ領域下部のY座標
        g.DrawLine(Pens.Gold, _mp.X, CInt(y1), _mp.X, CInt(y2))
        g.DrawLine(Pens.Gold, CInt(x1), _mp.Y, CInt(x2), _mp.Y)
    End Sub

引用返信 編集キー/
■77326 / inTopicNo.9)  Re[3]: Chartでマウスと共に移動する十字線
□投稿者/ ゆい (3回)-(2015/10/08(Thu) 00:10:01)
2015/10/08(Thu) 00:11:14 編集(投稿者)
2015/10/08(Thu) 00:10:50 編集(投稿者)

No77321 (shu さん) に返信

ありがとうございます。

希望してたことが実現しました。
本当にありがとうございました。

解決済み
引用返信 編集キー/
■77327 / inTopicNo.10)  Re[2]: Chartでマウスと共に移動する十字線
□投稿者/ ゆい (4回)-(2015/10/08(Thu) 00:23:16)
ぶなっぷ さん
よもやま さん
WebSurfer さん
Jitta from iPhone さん

解決しました。
ありがとうございました。

解決済み
引用返信 編集キー/
■77328 / inTopicNo.11)  Re[3]: Chartでマウスと共に移動する十字線
□投稿者/ ゆい (5回)-(2015/10/08(Thu) 14:34:04)
すみません。解決済みにしたのですが、
マウスがChartのグラフ領域外になった時には、今引いた十字線(罫線)を消したいと思います。
よろしくお願いします。

引用返信 編集キー/
■77329 / inTopicNo.12)  Re[4]: Chartでマウスと共に移動する十字線
□投稿者/ shu (784回)-(2015/10/08(Thu) 14:43:39)
No77328 (ゆい さん) に返信
> すみません。解決済みにしたのですが、
> マウスがChartのグラフ領域外になった時には、今引いた十字線(罫線)を消したいと思います。
> よろしくお願いします。
>
先の提示コードで
_mp.Xをx1,x2の範囲であるか確認
_mp.Yをy1,y2の範囲であるか確認
すればよいです。

毎回書き直しているので
消すのではなく描画しなければOKです。

引用返信 編集キー/
■77331 / inTopicNo.13)  Re[5]: Chartでマウスと共に移動する十字線
□投稿者/ ゆい (6回)-(2015/10/08(Thu) 22:11:15)
No77329 (shu さん) に返信

すみません。
納得です。
ありがとうございました。

解決済み
引用返信 編集キー/


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

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -