作成日: 2025/06/13 最終更新日: 2025/06/13
文書種別
使用方法
詳細
本コンポーネントには、シリーズごとにデータラベルのフォーマット(小数点表示と%表示など)を変更する組み込みの機能は用意されていません。
代替方法として、SeriesクラスのSymbolRenderingイベントで、Graphics.DrawStringメソッドを使用して独自に文字列を描画する方法が考えられます。
以下に、簡単な設定コードを記載します。

◎サンプルコード(VB)
代替方法として、SeriesクラスのSymbolRenderingイベントで、Graphics.DrawStringメソッドを使用して独自に文字列を描画する方法が考えられます。
以下に、簡単な設定コードを記載します。
◎サンプルコード(VB)
Imports C1.Chart
Imports C1.Win.Chart
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
' データの作成
Dim dt As New DataTable()
dt.Columns.AddRange(New DataColumn() {
New DataColumn("X", GetType(Double)),
New DataColumn("Y1", GetType(Double)),
New DataColumn("Y2", GetType(Double))
})
dt.Rows.Add(1, 80, 0.6)
dt.Rows.Add(2, 120, 0.8)
dt.Rows.Add(3, 90, 0.7)
dt.Rows.Add(4, 130, 0.9)
dt.AcceptChanges()
FlexChart1.Series.Clear()
' 系列の設定
Dim series1 As New Series() With {
.Name = "S1",
.Binding = "Y1",
.BindingX = "X",
.ChartType = ChartType.Column,
.AxisY = New Axis() With {
.Position = Position.Left,
.Format = "#,#",
.Min = 0,
.Max = 200,
.Title = "S1"
}
}
Dim series2 As New Series() With {
.Name = "S2",
.Binding = "Y2",
.BindingX = "X",
.ChartType = ChartType.LineSymbols,
.AxisY = New Axis() With {
.Position = Position.Right,
.Format = "P1",
.Min = 0,
.Max = 1,
.Title = "S2"
}
}
FlexChart1.Series.Add(series1)
FlexChart1.Series.Add(series2)
' FlexChartのデータバインド
FlexChart1.DataSource = dt
' 独自のデータラベルの描画
AddHandler series1.SymbolRendering, AddressOf seriesInt_SymbolRendering
AddHandler series2.SymbolRendering, AddressOf seriesPct_SymbolRendering
End Sub
Private Sub seriesInt_SymbolRendering(sender As Object, e As RenderSymbolEventArgs)
' データラベルを独自に描画します
Dim value As String = Convert.ToString(e.Series.GetValues(0)(e.Index))
Dim textRect As SizeF = e.Graphics.MeasureString(value, Me.Font)
Dim height As Single = CSng((FlexChart1.AxisY.Convert(0) - e.Point.Y) / 2 + e.Point.Y - textRect.Height / 2)
Dim pos As New PointF(e.Point.X - textRect.Width / 2, e.Point.Y)
Dim number As Integer = Integer.Parse(value)
Dim formatted As String = number.ToString("N0")
e.Graphics.DrawString(formatted, Me.Font, Brushes.DarkBlue, pos)
End Sub
Private Sub seriesPct_SymbolRendering(sender As Object, e As RenderSymbolEventArgs)
' データラベルを独自に描画します
Dim value As String = Convert.ToString(e.Series.GetValues(0)(e.Index))
Dim textRect As SizeF = e.Graphics.MeasureString(value, Me.Font)
Dim height As Single = CSng((FlexChart1.AxisY.Convert(0) - e.Point.Y) / 2 + e.Point.Y - textRect.Height / 2)
Dim pos As New PointF(e.Point.X - textRect.Width / 2, e.Point.Y - 25)
Dim number As Double = Double.Parse(value)
Dim formatted As String = number.ToString("P1")
e.Graphics.DrawString(formatted, Me.Font, Brushes.Black, pos)
End Sub
End Class
◎サンプルコード(C#)
using C1.Chart;
using C1.Win.Chart;
namespace prj_FlexChart
{
public partial class Form1 : Form
{
int npts = 5;
Random rnd = new Random();
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
// データの作成
DataTable dt = new DataTable();
dt.Columns.AddRange(new DataColumn[]
{
new DataColumn("X", typeof(double)),
new DataColumn("Y1", typeof(double)),
new DataColumn("Y2", typeof(double)),
});
dt.Rows.Add(1, 80, 0.6);
dt.Rows.Add(2, 120, 0.8);
dt.Rows.Add(3, 90, 0.7);
dt.Rows.Add(4, 130, 0.9);
dt.AcceptChanges();
flexChart1.Series.Clear();
// 系列の設定
var series1 = new Series()
{
Name = "S1",
Binding = "Y1",
BindingX = "X",
ChartType = ChartType.Column,
AxisY = new Axis()
{
Position = Position.Left,
Format = "#,#",
Min = 0,
Max = 200,
Title = "S1"
},
};
var series2 = new Series()
{
Name = "S2",
Binding = "Y2",
BindingX = "X",
ChartType = ChartType.LineSymbols,
AxisY = new Axis()
{
Position = Position.Right,
Format = "P1",
Min = 0,
Max = 1,
Title = "S2"
},
};
flexChart1.Series.Add(series1);
flexChart1.Series.Add(series2);
// FlexChartのデータバインド
flexChart1.DataSource = dt;
// 独自のデータラベルの描画
series1.SymbolRendering += seriesInt_SymbolRendering;
series2.SymbolRendering += seriesPct_SymbolRendering;
}
private void seriesInt_SymbolRendering(object sender, RenderSymbolEventArgs e)
{
// データラベルを独自に描画します
var value = Convert.ToString(e.Series.GetValues(0)[e.Index]);
var textRect = e.Graphics.MeasureString(value, this.Font);
var height = (float)(flexChart1.AxisY.Convert(0) - e.Point.Y) / 2 + e.Point.Y - textRect.Height / 2;
var pos = new PointF(e.Point.X - textRect.Width / 2, e.Point.Y);
int number = int.Parse(value);
string formatted = number.ToString("N0");
e.Graphics.DrawString(formatted, this.Font, Brushes.DarkBlue, pos);
}
private void seriesPct_SymbolRendering(object sender, RenderSymbolEventArgs e)
{
// データラベルを独自に描画します
var value = Convert.ToString(e.Series.GetValues(0)[e.Index]);
var textRect = e.Graphics.MeasureString(value, this.Font);
var height = (float)(flexChart1.AxisY.Convert(0) - e.Point.Y) / 2 + e.Point.Y - textRect.Height / 2;
var pos = new PointF(e.Point.X - textRect.Width / 2, e.Point.Y - 25);
double number = double.Parse(value);
string formatted = number.ToString("P1");
e.Graphics.DrawString(formatted, this.Font, Brushes.Black, pos);
}
}
}