何度もすみません。
ローソク足をクリックすることで、その該当するデータを特定したく、あれこれ探しいてる内にここに行き着きました。
http://www.hanatyan.sakura.ne.jp/dotnet/chart24.htm
使えるかと思い、早速試しては見るもののエラーが出て四苦八苦しています。
なにぶん能力不足でどうにもなりません。
お手数をお掛けしますがよろしくお願いします。
Public Class Form1
Private frgElement As Boolean
'
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim tbl As New DataTable
'列の作成
With tbl.Columns
.Add("日付", GetType(String))
.Add("高値", GetType(Integer))
.Add("安値", GetType(Integer))
.Add("始値", GetType(Integer))
.Add("終値", GetType(Integer))
End With
'データの追加
tbl.Rows.Add("2012/08/1", 700, 300, 650, 550)
tbl.Rows.Add("2012/08/2", 500, 200, 300, 400)
tbl.Rows.Add("2012/08/7", 650, 400, 600, 450)
tbl.Rows.Add("2012/08/8", 800, 300, 300, 550)
'初期化
Chart1.Series.Clear()
'グラフの種類,系列,軸の設定
Dim rosoku = Chart1.Series.Add("ローソク足")
With rosoku
.ChartType = DataVisualization.Charting.SeriesChartType.Candlestick
.XValueMember = "日付"
.YValueMembers = "高値, 安値, 始値, 終値"
.IsVisibleInLegend = False
End With
Chart1.DataSource = tbl
Chart1.DataBind()
Chart1.ChartAreas(0).AxisX.MajorGrid.Enabled = False
Chart1.ChartAreas(0).AxisX.MinorGrid.Enabled = False
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
'Microsoft Chart Control で クリックした位置の要素を取得
frgElement = Not frgElement 'クリック毎にフラグを設定
End Sub
Private Sub Chart1_MouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Chart1.MouseClick
'クリックした位置の要素を取得
Dim htrResult As HitTestResult = Chart1.HitTest(e.X, e.Y)
If htrResult.ChartElementType = ChartElementType.DataPoint And frgElement = True Then
Dim i As Integer = htrResult.PointIndex
Dim dp As DataPoint = htrResult.Series.Points(i)
For j As Integer = 0 To Chart1.Series.Count - 1
If Chart1.Series(j).Name = htrResult.Series.Name Then
Dim SeriesNo As Integer = j
' Debug.Print(SeriesNo.ToString)
Exit For
End If
Next
'クリックした位置の要素を表示
MessageBox.Show(String.Format("{0}({1}) : {2}", htrResult.Series.Name, dp.AxisLabel, dp.YValues(0)))
End If
End Sub
End Class
コピーして実行しましたが特に実行時エラーは
発生しませんでした。Importsは追加しましたが。
どんなことをしたときにどんなえらーがでたのかかかれた
ほうがよいです。
shuさん、ありがとうございます。
>Importsは追加しましたが。
調べてみましたがImportsの意味が理解出来ませんでした(^^;
>どんなことをしたときにどんなえらーがでたのかかかれたほうがよいです。
これからは書くようにします。
型 'HitTestResult' が定義されていません。
型 'DataPoint' が定義されていません。
'ChartElementType' は宣言されていません。アクセスできない保護レベルになっています。
エラーはこの三つです。
よろしくお願いします。
やはりImportsでしたか。
例えばDataPointですが名前空間を含むフルの型名は
『System.Windows.Forms.DataVisualization.Charting.DataPoint』
http://msdn.microsoft.com/ja-jp/library/system.windows.forms.datavisualization.charting.datapoint.aspx
なので何も指定しない場合は
> Dim dp As DataPoint
Dim dp As System.Windows.Forms.DataVisualization.Charting.DataPoint
のように書かないといけません。
各vbファイルの先頭にImportsを書くと書いた部分を省略することが出来るようになります。
この場合
Imports System.Windows.Forms.DataVisualization.Charting
を記述することにより提示された記述によるエラーが解消されます。
また
プロジェクトのプロパティから参照ページを表示してインポートされた名前空間に追加することによりプロジェクト全体で有効になります。
Importsには書き方がもう1つあり
例えば
Imports Charting=System.Windows.Forms.DataVisualization.Charting
と記述すると
Dim dp As Charting.DataPoint
という書き方が可能になります。このときはDataPointだけの記述はエラーに
なります。
shuさん、ありがとうございます。
今現在、困ってるところをこのように教えて頂く事は本当に有り難くただただ感謝!感謝!です。
Charting=System.Windows.Forms.DataVisualization.Charting
をインポートされた名前空間に追加しましたが、今度は…、
Cursor.Current = Cursors.Cross の所で、
警告 1 インスタンスを経由する共有メンバー、定数メンバー、列挙型メンバー、または入れ子にされた型へのアクセスです。正規の式は評価されません。
が出てしまい、Imports System.Windows.Forms.DataVisualization.Charting を記述する方法で対処しました。
すると今度は…、
Dim htrResult As HitTestResult = Chart1.HitTest(e.X, e.Y) の所で、
エラー 1 'X' は 'System.EventArgs' のメンバーではありません。
エラー 2 'Y' は 'System.EventArgs' のメンバーではありません。
が出るようになってしまいました。
お教えの程よろしくお願いします。
shuさん、お騒がせして申し訳ありません。
エラーは試行錯誤の途中での戻し忘れによるものでした。
教えて頂いたお陰で希望通りになりました。
本当にありがとうございました。
ツイート | ![]() |