tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルMicrosoft Chart Controlsについて
記事No10280
投稿日: 2010/11/01(Mon) 22:22
投稿者すみ
はじめまして お世話になります

Microsoft Chart Controlsについての質問なのですが,チャート内をクリックしてその座標を表示させたいのですがどのようにすればよいのでしょうか?

環境 WindowsXPSP3 VB2010 (VB6一年程度,VB2010数カ月程度の経験しか有りません)

Private Sub Chart1_MouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Chart1.MouseClick
        Dim R As HitTestResult
        R = Chart1.HitTest(e.Location.X, e.Location.Y, True)
        Label1.Text = R.Object.ToString
End Sub 

このようにしてチャート中にプロットした線上の座標は表示させれるようになったのですが,なにもプロットしていない点での座標の表示方法がわかりません.
アドバイスよろしくお願いします.

[ツリー表示へ]
タイトルRe: Microsoft Chart Controlsについて
記事No10281
投稿日: 2010/11/01(Mon) 23:16
投稿者花ちゃん
> Microsoft Chart Controlsについての質問なのですが,チャート内をクリックしてその座標を表示させたいのですがどのようにすればよいのでしょうか?

下記の投稿されたコードは理解せずに書かれたのでしょうか?
理解していないなら、調べ直して見て下さい。
(自分の今いる所の地図を書いて私はどこにいるのでしょうかと尋ねているようなものです)

> Private Sub Chart1_MouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Chart1.MouseClick
>         Dim R As HitTestResult
>         R = Chart1.HitTest(e.Location.X, e.Location.Y, True)
>         Label1.Text = R.Object.ToString
> End Sub 

※ クリック位置の座標を取得して何をしたいのか知りませんが、多分次の段階で
  又、聞く事になるかと。

[ツリー表示へ]
タイトルRe^2: Microsoft Chart Controlsについて
記事No10282
投稿日: 2010/11/01(Mon) 23:29
投稿者すみ
e.Location.X, e.Location.Yでマウスでクリックしたチャート内の位置を習得
HitTestで画面上のその位置にチャートでプロットしている要素が存在しているか調べHitTestResultに返す
存在していればプロットされている点のチャートでの座標を返す
というものではないのですか?

このコードではチャート上のデータがプロットされていない場所ではマウスの位置はわかりますが、チャートでの座標が返ってこないため困っているのですがどのように直せばよいかわかりません。

よろしければHittest HitTestResultのメソッド等がわかりやすくのってるHP等ありましたら教えてもらえませんか?

[ツリー表示へ]
タイトルRe^3: Microsoft Chart Controlsについて
記事No10283
投稿日: 2010/11/01(Mon) 23:38
投稿者花ちゃん
> e.Location.X, e.Location.Yでマウスでクリックしたチャート内の位置を習得

> このコードではチャート上のデータがプロットされていない場所ではマウスの位置はわかりますが、チャートでの座標が返ってこないため困っているのですがどのように直せばよいかわかりません。

チャート内をクリックしてその座標を表示させたいのじゃないのですか?
e.Location.X が、チャート上でマウスクリックした座標位置じゃないのですか?

Private Sub Chart1_MouseClick(ByVal sender As Object, ByVal e As  _
                     System.Windows.Forms.MouseEventArgs) Handles Chart1.MouseClick
   Label1.Text = e.Location.ToString
End Sub

[ツリー表示へ]
タイトルRe^4: Microsoft Chart Controlsについて
記事No10284
投稿日: 2010/11/01(Mon) 23:51
投稿者すみ
e.Locationでチャートコントロール左上からの座標(100 100)みたいなのが返ってくるのは理解してましてそれをHittestに渡して知りたいのはチャート内でプロットしている点を基準とした座標です。

0   1.023
0.04  1.045
0.08  1.057
0.12  1.087
0.16  1.101

というような点を折れ線プロットしたchart上で0.08  1.057の近くをクリックしたら上記のコードで{0.08  1.057}と表示されますが、折れ線がないチャート内の場所(例えば0.04 2.000のような場所)をクリックすると座標がでてこず〜Areaなどの文字列が返ってくるのでこれを{0.04 2.000}と数値が返ってくるようにしたいのです。

説明がわかりにくいですがよろしくおねがいします。

[ツリー表示へ]
タイトルRe^5: Microsoft Chart Controlsについて
記事No10285
投稿日: 2010/11/02(Tue) 00:21
投稿者花ちゃん
> e.Locationでチャートコントロール左上からの座標(100 100)みたいなのが返ってくるのは理解してましてそれをHittestに渡して知りたいのはチャート内でプロットしている点を基準とした座標です。
>
> 0   1.023
> 0.04  1.045
> 0.08  1.057
> 0.12  1.087
> 0.16  1.101
>
> というような点を折れ線プロットしたchart上で0.08  1.057の近くをクリックしたら上記のコードで{0.08  1.057}と表示されますが、折れ線がないチャート内の場所(例えば0.04 2.000のような場所)をクリックすると座標がでてこず〜Areaなどの文字列が返ってくるのでこれを{0.04 2.000}と数値が返ってくるようにしたいのです。
>
> 説明がわかりにくいですがよろしくおねがいします。

それは、クリックした位置の座標とは、言わないのでは。
Y軸やX軸の目盛位置の話ではないのですか?

そもそも、その位置を知って何をしたいのですか? 位置を知ればそれはできるのですか?
何かを描画したいなら、座標位置(一般的に言う)で描画する事になるので、計算して
求めるとかになります。

本来は? 下記のようにするのが後々加工しやすいのですが。
http://hanatyan.sakura.ne.jp/samplepic/vb9_387.htm

[ツリー表示へ]
タイトルRe^6: Microsoft Chart Controlsについて
記事No10286
投稿日: 2010/11/02(Tue) 00:45
投稿者すみ
基準点(座標系)が違うだけで両方「座標」だと思いますが・・・

やりたいことは先程いったような2列のデータが700行ほどありその点をチャート上にプロット
一定範囲内のデータのバックグラウンドを多項式近似して、それを元のデータから差し引く
その後FFT処理をかけてピークのフィッティングを行う。

といった感じなのです。範囲の指定をチャートの2点のクリックでおこないたいと思い質問をしました。なのでプロットした点での座標(元のデータ基準)が分かれば処理は可能です。逆にe.locationでの値が分かっていてもあとの処理にはつながりません。

参考URLありがとうございます。しかし見てもあまりメリットがわかりませんでした。
ただ計算でできるなら少し試してみようとおもいます。ありがとうございました。

[ツリー表示へ]
タイトルRe^7: Microsoft Chart Controlsについて
記事No10287
投稿日: 2010/11/02(Tue) 05:56
投稿者花ちゃん
> 基準点(座標系)が違うだけで両方「座標」だと思いますが・・・

>このようにしてチャート中にプロットした線上の座標は表示させれるようになったのですが
        Dim R As HitTestResult
        R = Chart1.HitTest(e.Location.X, e.Location.Y, True)
        Label1.Text = R.Object.ToString

そもそも、ここで Label1.Text に表示されているものは、座標ではなく元データの
値です。
従って、元データが表示されていない所の値は、当然表示されるはずがありません。

因みに、同様にして通常の棒グラフで同様に取得して見て下さい。
(棒グラフの棒のどの位置をクリックしても同じ値になります)

X軸上やY軸上の位置は、単にグラフの目盛位置として区別するべきです。
少なくても、.NET で座標と言えば、ドットの位置を表し、単位は、Pixel で[0.04  1.045]
のような座標はあり得ません。
(地図で言う、東経・西経 と 距離のような関係かと)

座標系と言う事であれば、Windows 上では、スクリーン座標 と クライアント座標 だけかと、
従って、貴方がどう解釈しようが、チャート内をクリックしてその座標を表示したい と
聞かれれば、回答者は、クライアント座標 の取得方法を答えるしかありません。
 

[ツリー表示へ]
タイトルRe^8: Microsoft Chart Controlsについて
記事No10288
投稿日: 2010/11/02(Tue) 09:15
投稿者すみ
解説ありがとうございます。

別に.NET基準での座標で座標を言ってたわけではありません。数値の組み合わせと基準となる系が明確ならば座標だとおもうのでそれをさして座標といっていただけです。

やりたいことは自己解決しました。ありがとうございました。

[ツリー表示へ]