作成日: 2025/06/02 最終更新日: 2025/11/05
文書種別
不具合
状況
修正済み
詳細
FlexChart.AxisX で MajorGrid プロパティと MinorGrid プロパティの両方を true に設定し、MajorUnit=0.1 かつ MinorUnit=0.05 と設定した場合、主グリッド線が副グリッド線と重なる位置(例: X=0.4 または 0.5など)に描画されないことがあります。 代わりに、これらの位置では副グリッド線のみが表示されます。
※下記画像では""MajorGridStyle.Stroke = Brushes.Blue" を指定して主グリッド線を見やすいように青くしています。

※下記画像では""MajorGridStyle.Stroke = Brushes.Blue" を指定して主グリッド線を見やすいように青くしています。
回避方法
この問題は2025J v1.1(4.8.20251.721)で修正されました。
※修正版を適用しない場合の回避方法は以下の通りです。
既定の副グリッド線をキャンセルし、Renderedイベントで独自に縦線を描画する方法が考えられます。
◎サンプルコード(VB)
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
' Rendered イベントで副グリッドを独自に描画
FlexChart1.AxisX.Min = 0
FlexChart1.AxisX.Max = 1
FlexChart1.AxisX.MajorUnit = 0.1
FlexChart1.AxisX.MinorUnit = 0.05
FlexChart1.AxisX.MajorGrid = True
FlexChart1.AxisX.MinorGrid = False ' 既定の副グリッド線をキャンセル
FlexChart1.AxisX.MajorGridStyle.Stroke = Brushes.Black
AddHandler FlexChart1.Rendered, AddressOf FlexChart1_Rendered
End Sub
Private Sub FlexChart1_Rendered(sender As Object, e As C1.Win.Chart.RenderEventArgs)
Dim chart = FlexChart1
Dim g = e.Graphics
Dim min = chart.AxisX.ActualMin
Dim max = chart.AxisX.ActualMax
Dim minorUnit = chart.AxisX.MinorUnit
Dim majorUnit = chart.AxisX.MajorUnit
' 主目盛の位置を収集しておく(重複描画を防ぐため)
Dim majorTicks As New HashSet(Of Double)
For v = chart.AxisX.Min To chart.AxisX.Max + 0.00001 Step majorUnit
majorTicks.Add(Math.Round(v, 10))
Next
' 副グリッド線を描画(半透明の黒)
Using pen As New Pen(Color.FromArgb(64, Color.Black), 1.0F)
For x = min To max + 0.00001 Step minorUnit
Dim roundedX = Math.Round(x, 10)
If majorTicks.Contains(roundedX) Then
Continue For ' 主グリッドと同じ位置なら描画しない
End If
Dim xCoord As Single = chart.AxisX.Convert(x)
g.DrawLine(pen, xCoord, chart.PlotRect.Top, xCoord, chart.PlotRect.Bottom)
Next
End Using
End Sub
◎サンプルコード(C#)
private void Form1_Load(object sender, EventArgs e)
{
// Rendered イベントで副グリッドを独自に描画
flexChart1.AxisX.Min = 0;
flexChart1.AxisX.Max = 1;
flexChart1.AxisX.MajorUnit = 0.1;
flexChart1.AxisX.MinorUnit = 0.05;
flexChart1.AxisX.MajorGrid = true;
flexChart1.AxisX.MinorGrid = false; // 既定の副グリッド線をキャンセル
flexChart1.AxisX.MajorGridStyle.Stroke = Brushes.Black;
flexChart1.Rendered += flexChart1_Rendered;
}
private void flexChart1_Rendered(object? sender, C1.Win.Chart.RenderEventArgs e)
{
var chart = flexChart1;
var g = e.Graphics;
double min = chart.AxisX.ActualMin;
double max = chart.AxisX.ActualMax;
double minorUnit = chart.AxisX.MinorUnit;
double majorUnit = chart.AxisX.MajorUnit;
// 主目盛の位置を収集しておく(重複描画を防ぐため)
var majorTicks = new HashSet<double>();
for (double v = chart.AxisX.Min; v <= chart.AxisX.Max + 0.00001; v += majorUnit)
majorTicks.Add(Math.Round(v, 10));
// 副グリッド線を描画(半透明の黒)
using (var pen = new Pen(Color.FromArgb(64, Color.Black), 1f))
{
for (double x = min; x <= max + 0.00001; x += minorUnit)
{
double roundedX = Math.Round(x, 10);
if (majorTicks.Contains(roundedX))
continue; // 主グリッドと同じ位置なら描画しない
float xCoord = (float)chart.AxisX.Convert(x);
g.DrawLine(pen, xCoord, chart.PlotRect.Top, xCoord, chart.PlotRect.Bottom);
}
}
}