タイトル : Chartオブジェクトで任意の場所にラベルオブジェクトを移動 投稿日 : 2016/04/26(Tue) 16:33 投稿者 : 食う寝る走る
開発環境 OS:Windows7(32bit)プロフェッショナル IDE:VS2015 コミュニティ(VB.net) Chartオブジェクトで、散布図を描画しました。 コメントとしてラベルを使いたいと考えております。「Chartオブジェクト内で任意の場所にラベルオブジェクトを移動」させたいのですが、お知恵を拝借したく思います。 Pictureboxオブジェクトで散布図を作成して行う方法はできますが、ChartオブジェクトでLabel1をプロットした緑の点に移動させるには? 可否は?ですが、考え方として2つ浮かびますが、何か良い方法ないでしょうか。 (1)Labelコントロールの親コントロールをピクチャーコントロールとして移動できないか? (2)Chartオブジェクト上のポイントを、スクリーン座標にしてからスクリーン座標でLabelを移動する?例題として、マウスカーソルやオブジェクトの位置取得はググると見つかるのですが、ChartコントロールのChartAreas内の座標からのものは・・・。 下記コードは、フォームに、 Chart Picturebox Button Label×2個 貼り付けて実行してください。 ’---------------------------------------------------------------------------------------- Imports System.Windows.Forms.DataVisualization.Charting Public Class Form1 Dim series1 As New Series() 'SIN Dim series2 As New Series() '任意 Dim xval() As Double 'X軸格納 Dim yval() As Double 'Y1軸格納 Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load Label1.BackColor = Color.Red Label2.BackColor = Color.Red 'チャートコントロールオブジェクト Chart1.Series.Clear() '~データのシリーズ追記 Chart1.Series.Add(series1) 'SIN Chart1.Series.Add(series2) '内部データの初期化 series1.Points.Clear() series2.Points.Clear() With Chart1.ChartAreas(0).AxisX '10点毎に補助線を表示 .MinorGrid.Enabled = True 'True に設定しないと表示しない .Title = "X" .MinorGrid.Interval = 100 .MinorGrid.LineDashStyle = DataVisualization.Charting.ChartDashStyle.Dash .LabelStyle.Format = "0.0" End With With Chart1.ChartAreas(0).AxisY 'Y軸の設定 .TitleForeColor = Color.Red .Title = "sin(X)" 'タイトルのテキストを設定 .LineColor = Color.Red .MajorGrid.LineColor = Color.Red .LabelStyle.ForeColor = Color.Red .MajorGrid.LineDashStyle = DataVisualization.Charting.ChartDashStyle.Solid .LabelStyle.Format = "0.0" .Enabled = AxisEnabled.True '第1軸を有効化 End With '凡例 Chart1.Series(0).LegendText = "sin(X)" ' グラフの種類は散布図(sin Chart) With series1 .ChartType = SeriesChartType.Point .MarkerSize = 5 .MarkerStyle = MarkerStyle.Circle .MarkerBorderColor = Color.Black .MarkerBorderWidth = 0.1 .MarkerColor = Color.Blue .XAxisType = AxisType.Primary .YAxisType = AxisType.Primary .Enabled = True End With ' グラフの種類は散布図(任意Point Chart) With series2 .ChartType = SeriesChartType.Point .MarkerSize = 20 .MarkerStyle = MarkerStyle.Circle .MarkerBorderColor = Color.Black .MarkerBorderWidth = 0.1 .MarkerColor = Color.Green .XAxisType = AxisType.Primary .YAxisType = AxisType.Primary .Enabled = True End With Dim k As Integer = 0 '格納配列のアドレス用カウンター For i = 0 To 10 Step 0.01 ReDim Preserve xval(k) '配列の要素数の変更 xval(k) = i 'X軸値格納 ReDim Preserve yval(k) '配列の要素数の変更 yval(k) = Math.Sin(xval(k)) 'Y軸値格納 series1.Points.AddXY(CDbl(xval(k)), yval(k)) 'SIN波プロット k = k + 1 Next End Sub Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 'Labelコントロールの親コントロールをチャートコントロールとする Label1.Parent = Chart1 'Labelコントロールの親コントロールをピクチャーコントロールとする Label2.Parent = PictureBox1 series2.Points.Clear() '内部データの初期化 series2.Points.AddXY(8, 1) '打点 Me.Label1.Location = New Point(8, 1) Dim objBrush = New SolidBrush(System.Drawing.Color.Blue) Dim objGrp As Graphics = PictureBox1.CreateGraphics ' 楕円を描く objGrp.FillEllipse(objBrush, 500, 50, 20, 20) Label2.Location = New Point(500, 50) ' リソースを解放する objBrush.Dispose() objGrp.Dispose() End Sub End Class ’---------------------------------------------------------------------------------------- |