tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
[ツリー表示へ]  [ワード検索]  [Home]

タイトル 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

’----------------------------------------------------------------------------------------

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。