Hi,
So far i do not use Char control. But i saw a sample that is a candle char. What i want to do is that select a candle bar by clicking. I guess i can do it. i can handle click event, calculate client coordinate and calculate coordinate of every candle bar then i should know which bar was clicked. But it is not convenient. So is there any easier way to do it?
|
this.chartControl1.ChartRegionClick += ChartControl1_ChartRegionClick;
private void ChartControl1_ChartRegionClick(object sender, ChartRegionMouseEventArgs e)
{
var series = this.chartControl1.Series[0];
series.ConfigItems.FinancialItem.PriceDownColor = Color.Empty;
series.ConfigItems.FinancialItem.PriceUpColor = Color.Empty;
// Returns whether its click the candle segment
if (e.Region.IsChartPoint)
{
//Get the series index in the chart
int seriesIndex = e.Region.SeriesIndex;
//Get the series datapoint index
int datapointIndex = e.Region.PointIndex;
for(int i = 0; i < series.Points.Count; i++)
{
var values = series.Points[i].YValues;
if (i == datapointIndex)
{
series.Styles[i].Interior = new Syncfusion.Drawing.BrushInfo(Color.Blue);
}
else
{
if (values[2] < values[3])
{
series.Styles[i].Interior = new Syncfusion.Drawing.BrushInfo(Color.Green);
}
else
{
series.Styles[i].Interior = new Syncfusion.Drawing.BrushInfo(Color.Red);
}
}
}
this.chartControl1.Redraw(true);
}
}
|
thanks, very good sample.
but there is a problem. if i click on the blank area of chart, background color of all candle bars changed. how to do not change background color?
|
private void ChartControl1_ChartRegionClick(object sender, ChartRegionMouseEventArgs e)
{
var series = this.chartControl1.Series[0];
// Returns whether its click the candle segment
if (e.Region.IsChartPoint)
{
series.ConfigItems.FinancialItem.PriceDownColor = Color.Empty;
series.ConfigItems.FinancialItem.PriceUpColor = Color.Empty;
//Get the series index in the chart
int seriesIndex = e.Region.SeriesIndex;
//Get the series datapoint index
int datapointIndex = e.Region.PointIndex;
for(int i = 0; i < series.Points.Count; i++)
{
var values = series.Points[i].YValues;
if (i == datapointIndex)
{
series.Styles[i].Interior = new Syncfusion.Drawing.BrushInfo(Color.Blue);
}
else
{
if (values[2] < values[3])
{
series.Styles[i].Interior = new Syncfusion.Drawing.BrushInfo(Color.Green);
}
else
{
series.Styles[i].Interior = new Syncfusion.Drawing.BrushInfo(Color.Red);
}
}
}
this.chartControl1.Redraw(true);
}
}
|
Nice!!!