Page 1 of 1
Example for AxisBreaksTool?
Posted: Wed Nov 09, 2011 11:13 am
by 15660394
Hi,
Do you have an example how to use the AxisBreaksTool (VB preferred)?
In the Tutorials all tools are described with sourcecode except this one. Now I need the AxisBreaksTool and don’t get it running.
My X-Axis (bottom) has DateTime values. I try to display a candle-series, which has time-gaps (Weekends) and thought that the AxisBreaksTool is the right tool for it. So I added an AxisBreaksTool to the Chart-Tools-Collection, set the Axis to the Bottom-Axis and filled the Breaks collection of the AxisBreaksTool with AxisBreak–objects. When I try to fill the StartValue property of the AxisBreak with some data (Double), I get an exception of the type "System.NullReferenceException" occurred in TeeChart.dll. Because of the Date-values of the Bottom axis I tried the Double – format of the Date which is returned by the .ToOADate function of the Date-values. Don’t know if this is right. A nice example of the using of the AxisBreaksTool would be very helpful.
Thank you,
Wolfgang
Re: Example for AxisBreaksTool?
Posted: Wed Nov 09, 2011 4:11 pm
by 10050769
Hello Wolfgang,
I recommend you take a look in next lines of code where I have used AxisBreaks in Chart that have a Candle Series:
Code: Select all
private void InitializeChart()
{
tChart1.Aspect.View3D = false;
//InitializeChart.
tChart1.Series.Clear();
Steema.TeeChart.Styles.Candle candle1 = new Steema.TeeChart.Styles.Candle(tChart1.Chart);
Random rnd = new Random();
DateTime today = DateTime.Today;
candle1.XValues.DateTime = true;
candle1.DateTimeFormat = "dd/MM/yyy";
candle1.FillSampleValues(20);
//AxesBreaks.
Steema.TeeChart.Tools.AxisBreaksTool axisbreak = new Steema.TeeChart.Tools.AxisBreaksTool(tChart1.Chart);
Steema.TeeChart.Tools.AxisBreak axisBreak1 = new Steema.TeeChart.Tools.AxisBreak(axisbreak);
Steema.TeeChart.Tools.AxisBreak axisBreak2 = new Steema.TeeChart.Tools.AxisBreak(axisbreak);
axisBreak1.StartValue = DateTime.Today.AddDays(30).ToOADate();
axisBreak1.EndValue = DateTime.Today.AddDays(35).ToOADate();
axisBreak2.StartValue = DateTime.Today.AddDays(10).ToOADate();
axisBreak2.EndValue = DateTime.Today.AddDays(15).ToOADate();
axisbreak.Axis = tChart1.Axes.Bottom;
tChart1.Axes.Bottom.Labels.DateTimeFormat = "dd/MM/yyyy";
axisbreak.GapSize = 20;
tChart1.Axes.Bottom.Labels.Angle = 90;
}
Can you tell us if previous lines of code works as you expect?
I hope will helps.
Thanks,
Re: Example for AxisBreaksTool?
Posted: Fri Nov 11, 2011 11:04 am
by 15660394
Hi Sandra,
thanks a lot for your code. It works perfect.
I had something very similar, using real data and get heavy crashes every time I added a break on a gap.
The magic line in your code is:
tChart1.Axes.Bottom.Labels.DateTimeFormat = "dd/MM/yyyy";
I had not set the format of the labels and got an exception from mscorlib pointing to
Steema.TeeChart.Tools.AxisBreaksTool.ChartGetAxisLabel(Object sender, GetAxisLabelEventArgs e)
If you are interested, I can supply a small project to show exactly this effect.
Thanks again,
Wolfgang
Example for AxisBreaksTool: New problem
Posted: Fri Nov 11, 2011 9:20 pm
by 15660394
Hi Sandra,
the time-gaps are killed thanks to your AxisBreaksTool. But here is the next problem:
I use the zoom-feature and depending on the time-length of the x-axis after the zooming I set the labels to a new time-format.
So I have the right labelling depending on the zoom. This works great, if no AxisBreaks are present.
If AxisBreaks are present, you may not alter the format of the TChart1.Axes.Bottom.Labels.DateTimeFormat
If you set it for example from “dd/MM/yyyy” to “HH:mm”, the same crash will happen like described above.
The error is thrown inside the TeeChart.dll and I cannot catch it with a Try -Catch – EndTry in my code.
The error only occurs, if AxisBreaks are active and defined.
I can supply sourcecode if you need it to reproduce the error.
Thank you for your help,
Wolfgang
Re: Example for AxisBreaksTool?
Posted: Mon Nov 14, 2011 11:30 am
by 10050769
Hello Wolfgang,
I had not set the format of the labels and got an exception from mscorlib pointing to
Steema.TeeChart.Tools.AxisBreaksTool.ChartGetAxisLabel(Object sender, GetAxisLabelEventArgs e)
If you are interested, I can supply a small project to show exactly this effect.
Thanks for your information. Would be very helpful for us, if you can send us a simple project to reproduce this problem.
the time-gaps are killed thanks to your AxisBreaksTool. But here is the next problem:
I use the zoom-feature and depending on the time-length of the x-axis after the zooming I set the labels to a new time-format.
So I have the right labelling depending on the zoom. This works great, if no AxisBreaks are present.
If AxisBreaks are present, you may not alter the format of the TChart1.Axes.Bottom.Labels.DateTimeFormat
If you set it for example from “dd/MM/yyyy” to “HH:mm”, the same crash will happen like described above.
The error is thrown inside the TeeChart.dll and I cannot catch it with a Try -Catch – EndTry in my code.
The error only occurs, if AxisBreaks are active and defined.
I can supply sourcecode if you need it to reproduce the error.
I have made a simple code that I think can help you to achieve as you want without problems:
Code: Select all
public Form1()
{
InitializeComponent();
InitializeChart();
}
bool boolDateTime;
private void InitializeChart()
{
tChart1.Aspect.View3D = false;
//InitializeChart.
tChart1.Series.Clear();
Steema.TeeChart.Styles.Candle candle1 = new Steema.TeeChart.Styles.Candle(tChart1.Chart);
Random rnd = new Random();
DateTime today = DateTime.Today;
candle1.XValues.DateTime = true;
candle1.DateTimeFormat = "dd/mm/yyyy";
candle1.FillSampleValues(20);
//AxesBreaks.
Steema.TeeChart.Tools.AxisBreaksTool axisbreak = new Steema.TeeChart.Tools.AxisBreaksTool(tChart1.Chart);
Steema.TeeChart.Tools.AxisBreak axisBreak1 = new Steema.TeeChart.Tools.AxisBreak(axisbreak);
Steema.TeeChart.Tools.AxisBreak axisBreak2 = new Steema.TeeChart.Tools.AxisBreak(axisbreak);
axisBreak1.StartValue = DateTime.Today.AddDays(30).ToOADate();
axisBreak1.EndValue = DateTime.Today.AddDays(35).ToOADate();
axisBreak2.StartValue = DateTime.Today.AddDays(10).ToOADate();
axisBreak2.EndValue = DateTime.Today.AddDays(15).ToOADate();
axisbreak.Axis = tChart1.Axes.Bottom;
tChart1.Axes.Bottom.Labels.DateTimeFormat = "dd/mm/yyyy";
axisbreak.GapSize = 20;
tChart1.Axes.Bottom.Labels.Angle = 90;
tChart1.Zoomed += new EventHandler(tChart1_Zoomed);
tChart1.AfterDraw += new Steema.TeeChart.PaintChartEventHandler(tChart1_AfterDraw);
tChart1.Draw();
tChart1.UndoneZoom += new EventHandler(tChart1_UndoneZoom);
}
void tChart1_UndoneZoom(object sender, EventArgs e)
{
boolDateTime = false;
tChart1.Refresh();
}
void tChart1_AfterDraw(object sender, Steema.TeeChart.Drawing.Graphics3D g)
{
if (boolDateTime)
{
(tChart1[0] as Steema.TeeChart.Styles.Candle).DateTimeFormat = "HH:mm";
tChart1.Axes.Bottom.Labels.DateTimeFormat = "HH:mm";
}
else
{
(tChart1[0] as Steema.TeeChart.Styles.Candle).DateTimeFormat = "dd/mm/yyyy";
tChart1.Axes.Bottom.Labels.DateTimeFormat = "dd/mm/yyyy";
}
}
void tChart1_Zoomed(object sender, EventArgs e)
{
boolDateTime = true;
tChart1.Refresh();
}
Can you tell us, if previous code works as you expected?
I hope will helps.
Thanks,
Sample for throwing the error
Posted: Mon Nov 14, 2011 2:15 pm
by 15660394
Hello Sandra,
I attached a zip-file with a small VB-project showing the error. Hope that helps.
Didn’t try your code for the zooming yet, but it looks not to be the solution. I don’t have the problem to find a way to label the X-Axis accordingly.
In my program this is done in the GetAxisLabel – Event and works for labeling the Bottom-Axis from Years to Milliseconds.
The problem arises, when I have AxisBreaks defined. In this case, when you set the DateTimeFormat – property of the Bottom-Axis to a new Format-String, the same error is thrown in the TeeChart.dll like shown in my little sample-project.
I will try your code soon, but so far I can see, you set the DateTimeFormat in the AfterDraw-Event, I do it in the GetAxisLabel-Event. In both cases, the DateTimeFormat is set to a new value, which produces the error…
Thank you for your help,
Wolfgang
Re: Example for AxisBreaksTool?
Posted: Thu Nov 17, 2011 10:54 am
by 10050769
Hello Wolfgang,
Ok.I think is necessary use Axes.Bottom.Labels.DateTimeFormat if you want your axes breaks works fine. Please can you tell us, why next code doesn't solve your problem? Because, we can try to make an example that works as you expect.
Code: Select all
Private Sub InitializeChartFromSandra()
tChart1.Aspect.View3D = False
tChart1.Series.Clear()
Dim candle1 As Steema.TeeChart.Styles.Candle = New Steema.TeeChart.Styles.Candle(tChart1.Chart)
Dim rnd As Random = New Random()
Dim today As DateTime = DateTime.Today
candle1.XValues.DateTime = True
candle1.DateTimeFormat = "dd/MM/yyy"
candle1.FillSampleValues(20)
' //AxesBreaks.
Dim axisbreak As Steema.TeeChart.Tools.AxisBreaksTool = New Steema.TeeChart.Tools.AxisBreaksTool(tChart1.Chart)
Dim axisBreak1 As Steema.TeeChart.Tools.AxisBreak = New Steema.TeeChart.Tools.AxisBreak(axisbreak)
Dim axisBreak2 As Steema.TeeChart.Tools.AxisBreak = New Steema.TeeChart.Tools.AxisBreak(axisbreak)
axisBreak1.StartValue = DateTime.Today.AddDays(30).ToOADate()
axisBreak1.EndValue = DateTime.Today.AddDays(35).ToOADate()
axisBreak2.StartValue = DateTime.Today.AddDays(10).ToOADate()
axisBreak2.EndValue = DateTime.Today.AddDays(15).ToOADate()
axisbreak.Axis = tChart1.Axes.Bottom
tChart1.Axes.Bottom.Labels.DateTimeFormat = "dd/MM/yyyy"
axisbreak.GapSize = 20
tChart1.Axes.Bottom.Labels.Angle = 90
AddHandler tChart1.Zoomed, AddressOf tChart1_Zoomed
AddHandler tChart1.AfterDraw, AddressOf tChart1_AfterDraw
AddHandler tChart1.UndoneZoom, AddressOf tChart1_UndoneZoom
End Sub
Private Sub tChart1_Zoomed(ByVal sender As System.Object, ByVal e As System.EventArgs)
boolDateTime = True
'tChart1.Refresh()
End Sub
Private Sub tChart1_AfterDraw(ByVal sender As System.Object, ByVal g As Steema.TeeChart.Drawing.Graphics3D)
If boolDateTime Then
TryCast(tChart1(0), Steema.TeeChart.Styles.Candle).DateTimeFormat = "hh:mm:tt"
tChart1.Axes.Bottom.Labels.DateTimeFormat = "hh:mm:tt"
Else
TryCast(tChart1(0), Steema.TeeChart.Styles.Candle).DateTimeFormat = "dd/mm/yyyy"
tChart1.Axes.Bottom.Labels.DateTimeFormat = "dd/mm/yyyy"
End If
End Sub
Private Sub tChart1_UndoneZoom(ByVal sender As System.Object, ByVal e As System.EventArgs)
boolDateTime = False
tChart1.Refresh()
End Sub
Thanks,
Re: Example for AxisBreaksTool?
Posted: Mon Nov 21, 2011 8:30 am
by 15660394
Hi Sandra,
thanks a lot. I don't know why your code works and my code don't. But now i am able to use the AxisBreaks.
Thanks again,
Wolfgang