作成日: 2021/10/18 最終更新日:2021/10/18
文書種別
制限事項
状況
回避方法あり
詳細
日時を用いてX値を設定すると、Annotationの描画位置が設定したところからずれることがあります。
例えば、以下のように線注釈を設定しても、2021/10/08 14:34からずれた位置に描画されます。
これは、コントロール内部の実装上の制限となります。
例えば、以下のように線注釈を設定しても、2021/10/08 14:34からずれた位置に描画されます。
// アノテーションの作成
var al = new C1.Win.Chart.Annotation.AnnotationLayer(flexChart1);
var x = new DateTime(2021, 10, 08, 14, 34, 00).ToOADate();
var line = new C1.Win.Chart.Annotation.Line();
line.Attachment = C1.Chart.Annotation.AnnotationAttachment.DataCoordinate;
line.Start = new PointF((float)x, 1f);
line.End = new PointF((float)x, 5f);
これは、コントロール内部の実装上の制限となります。
回避方法
double型の座標を使用したクラス(LineD)を作成して利用する方法が考えられます。
このクラスを以下のように使用し、X座標を設定します。
public class LineD : C1.Win.Chart.Annotation.Line, C1.Chart.Annotation.ILine
{
C1.Chart._Point start = new C1.Chart._Point();
C1.Chart._Point end = new C1.Chart._Point();
C1.Chart._Point C1.Chart.Annotation.ILine.Start
{
get => start;
set => start = value;
}
C1.Chart._Point C1.Chart.Annotation.ILine.End
{
get => end;
set => end = value;
}
public double StartX
{
get => start.X;
set
{
start.X = value;
OnPropertyChanged("StartX");
}
}
public double StartY
{
get => start.Y;
set
{
start.Y = value;
OnPropertyChanged("StartY");
}
}
public double EndX
{
get => end.X;
set
{
end.X = value;
OnPropertyChanged("EndX");
}
}
public double EndY
{
get => end.Y;
set
{
end.Y = value;
OnPropertyChanged("EndY");
}
}
protected override _Size GetSize()
{
return new _Size(Math.Abs(StartX - EndX), Math.Abs(StartY - EndY));
}
protected override _Rect Bounds
{
get
{
var pt1 = Convert(start);
var pt2 = Convert(end);
return new _Rect(Math.Min(pt1.X, pt2.X), Math.Min(pt1.Y, pt2.Y), Math.Abs(pt2.X - pt1.X), Math.Abs(pt2.Y - pt1.Y));
}
}
}
このクラスを以下のように使用し、X座標を設定します。
// アノテーションの作成 (double型の座標に対応したLineDクラスを使用)
var al = new C1.Win.Chart.Annotation.AnnotationLayer(flexChart1);
var x = new DateTime(2021, 10, 08, 14, 34, 00).ToOADate();
var line1 = new LineD();
line1.Attachment = C1.Chart.Annotation.AnnotationAttachment.DataCoordinate;
line1.StartX = x; line1.StartY = 1;
line1.EndX = x; line1.EndY = 5;
al.Annotations.Add(line1);