Hi,
I’m using SciChartGroup with SciChartSurface to create a chart with multiple panes, each pane has a set of cursors including the CursorModifier with ShowAxisLabels=”True”. When mouse is over the panel where no any series I get an error:
Object reference not set to an instance of an object.
at Abt.Controls.SciChart.Visuals.Axes.TradeChartAxisLabelFormatter.c94f1c4a8b3176ab34988be02ae5c9853(IComparable cd9eb4abc8062a13034d7e1a95015cf34, Boolean c202464bb46bef74e568ab9e85eabcfae)
at Abt.Controls.SciChart.Visuals.Axes.TradeChartAxisLabelFormatter.FormatLabel(IComparable dataValue)
at Abt.Controls.SciChart.Visuals.Axes.AxisBase.FormatText(IComparable value, String format)
at Abt.Controls.SciChart.Visuals.Axes.AxisBase.HitTest(Point atPoint)
at Abt.Controls.SciChart.ChartModifiers.InspectSeriesModifierBase.HitTestAxis(IAxis axis, Point atPoint)
at Abt.Controls.SciChart.ChartModifiers.CursorModifier.c987c837b119aed1f35c1f0ac2cd58b4b.cf244cc494090613db790079d45f87bd9(IAxis c9602bd29fd5d7a98bc0428c28ceb8250)
at System.Linq.Enumerable.WhereSelectEnumerableIterator2.MoveNext()
1 source)
at System.Linq.Enumerable.FirstOrDefault[TSource](IEnumerable
at Abt.Controls.SciChart.ChartModifiers.CursorModifier.GetAxesData(Point mousePoint)
at Abt.Controls.SciChart.ChartModifiers.CursorModifier.HandleMasterMouseMove(Point mousePoint)
at Abt.Controls.SciChart.ChartModifiers.InspectSeriesModifierBase.cf02abbb1e36d2956f3f92f4d796607cf(Point cfe7da3d2fb2c1ba75ba1814199d02354)
at Abt.Controls.SciChart.ChartModifiers.InspectSeriesModifierBase.HandleMouseEvent(Point mousePoint, Boolean isMaster)
at Abt.Controls.SciChart.ChartModifiers.InspectSeriesModifierBase.OnModifierMouseMove(ModifierMouseArgs e)
at Abt.Controls.SciChart.ChartModifiers.ModifierGroup.c07d1dcb1c7ba461bbcbf5a1dd47c58a5(IChartModifier c6b1effd112e5355cd5f051dd91cd4f67, ModifierMouseArgs cbb39038dde40bfc3fdcfa70f4bbf8778)
at Abt.Controls.SciChart.ChartModifiers.ModifierGroup.c9e8960a6a8527c20ac9e46e162c72b22(Action2 c4bd4ab823835cf92d221476b6fb65a17, ModifierMouseArgs c4c23d80d4d060e409c3479ef17d6c65e)
1 c40a30a1bb6416cd164565919fdef15a9, Action`1 c885aac61bc9832561b7ff07903c88d5e)
at Abt.Controls.SciChart.ChartModifiers.ModifierGroup.OnModifierMouseMove(ModifierMouseArgs e)
at Abt.Controls.SciChart.Utility.Mouse.MouseManager.ca5839647cb861fa726b3261de72c52c0(ModifierMouseArgs cbb39038dde40bfc3fdcfa70f4bbf8778, IReceiveMouseEvents c18509698be3f9366c690e7d2b107b62c, Boolean c3791a1b71c1577bde30b55c12b2a5583)
at Abt.Controls.SciChart.Utility.Mouse.MouseManager.cf88844ca415efe316ebbc6460c4d5477.c7ca7af35639f570327394b11001b543a.c5980502f76d6e282773f80c5da0f84e7(IReceiveMouseEvents c133657388cc0f6f6615e21e129ac4b3a)
at A.c19dd4d74f6373c95c517d29624d76e4b.cacf72b657252e3e73860afb89d70cb9f[c13c28af86f0b14202b9c7ef43b1bd11a](IEnumerable
at Abt.Controls.SciChart.Utility.Mouse.MouseManager.cf88844ca415efe316ebbc6460c4d5477.c6b7aec04ebfc28e092adf0e569761d15(Object cae49ecc8585f35e8dd5ce624f7fb7ab5, MouseEventArgs c4c23d80d4d060e409c3479ef17d6c65e)
at A.cd43732d305fa7b65b611005fdcef35d8.c769264f2530d8b47196e47cbbe58cb89(MouseEventArgs cbb39038dde40bfc3fdcfa70f4bbf8778)
at A.cd43732d305fa7b65b611005fdcef35d8.cbe8969038b3b47585f72b9c703cd47da(Object c5e18ac7ef25e3e9c51dc36756b25ed1e, MouseEventArgs c4c23d80d4d060e409c3479ef17d6c65e)
at System.Windows.RoutedEventArgs.InvokeHandler(Delegate handler, Object target)
at System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)
at System.Windows.UIElement.RaiseEventImpl(DependencyObject sender, RoutedEventArgs args)
at System.Windows.UIElement.RaiseTrustedEvent(RoutedEventArgs args)
at System.Windows.Input.InputManager.ProcessStagingArea()
at System.Windows.Input.InputProviderSite.ReportInput(InputReport inputReport)
at System.Windows.Interop.HwndMouseInputProvider.ReportInput(IntPtr hwnd, InputMode mode, Int32 timestamp, RawMouseActions actions, Int32 x, Int32 y, Int32 wheel)
at System.Windows.Interop.HwndMouseInputProvider.FilterMessage(IntPtr hwnd, WindowMessage msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
at System.Windows.Interop.HwndSource.InputFilterMessage(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
at MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
at MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o)
at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
at MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(Object source, Delegate method, Object args, Int32 numArgs, Delegate catchHandler)
at System.Windows.Threading.Dispatcher.LegacyInvokeImpl(DispatcherPriority priority, TimeSpan timeout, Delegate method, Object args, Int32 numArgs)
at MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam)
at MS.Win32.UnsafeNativeMethods.DispatchMessage(MSG& msg)
at System.Windows.Threading.Dispatcher.PushFrameImpl(DispatcherFrame frame)
at System.Windows.Application.RunInternal(Window window)
at System.Windows.Application.Run()
at SciTest.App.Main() in d:\Projects\Test\SciChart\SciTest – копия\SciTest\obj\Debug\App.g.cs:line 0
at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()
I attached a sample project.
- esper asked 10 years ago
- You must login to post comments
Hi Esper,
We will investigate further. To resolve this by workaround, you can try this:
/// <summary> /// LabelFormatters are used to format cursor and axis labels from DataValues /// The DataValue will be an Integer index in the case of CategoryDateTimeAxis /// The DataValue will be a Double in the case of NumericAxis and a Double for DateTimeAxis /// For DateTimeAxis convert the Double to DateTIme like this: new DateTime((long)dataValue) /// </summary> public class CustomTradeChartAxisLabelFormatter : TradeChartAxisLabelFormatter { public override string FormatCursorLabel(IComparable dataValue) { if (dataValue == null) return "N/A"; return base.FormatCursorLabel(dataValue); } public override string FormatLabel(IComparable dataValue) { if (dataValue == null) return "N/A"; return base.FormatLabel(dataValue); } }
Create a custom LabelFormatter above that avoids the exception.
Then, use it like this
C#
// Assumes XAxis is a CategoryDateTimeAxis sciChartSurface.XAxis.LabelFormatter = new CustomTradeChartAxisLabelFormatter();
or XAML
<!-- Assumes you have declared CustomTradeChartAxisLabelFormatter as a resource in your UserControl.Resources --> <s:CategoryDateTimeAxis LabelFormatter="{StaticResource CustomTradeChartAxisLabelFormatter}"/>
Best regards,
Andrew
- Andrew Burnett-Thompson answered 10 years ago
-
Hi, Thanks, it solved the problem for me.
-
Hi Guys This workaround does not seem to be effective when the chart surface is in a datatemplate. My DataTemplate looks like this [code title="ChartTemplate"] [/code] And I am using the CustomFormatter as described above. What happens is I get a dataValue of "1/01/0001 12:00AM" which is not null and then the base.FormatLabel(dataValue) call falls over with an "Object not set..." error
-
Sorry not used to your code tags. Here's the DataTemplate as text
- You must login to post comments
I am considering applying server-side licensing for my javerScript application.
In the document below, there is a phrase “Our server-side licensing component is written in C++.”
(https://support.scichart.com/index.php?/Knowledgebase/Article/View/17256/42/)
However, there is only asp.net sample code on the provided github.
(https://github.com/ABTSoftware/SciChart.JS.Examples/tree/master/Sandbox/demo-dotnet-server-licensing)
I wonder if there is a sample code implemented in C++ for server-side licensing.
Can you provide c++ sample code?
Also, are there any examples to run on Ubuntu?
- Ian Carson answered 10 years ago
- You must login to post comments
Hi Guys
I solved this one with a slight change to the CustomTradeChartAxisLabelFormatter in a post on this forum.
Here is the code for anyone who might find it useful.
Regards
Ian Carson
public class CustomTradeChartAxisLabelFormatter : TradeChartAxisLabelFormatter { public override string FormatCursorLabel(IComparable dataValue) { if (dataValue == null) { return "N/A"; } var date = Convert.ToDateTime(dataValue); if (date.Year == 1) { return "N/A"; } return base.FormatCursorLabel(dataValue); } public override string FormatLabel(IComparable dataValue) { if (dataValue == null) { return "N/A"; } var date = Convert.ToDateTime(dataValue); if (date.Year == 1) { return "N/A"; } return base.FormatLabel(dataValue); } }
- Ian Carson answered 10 years ago
- You must login to post comments
Please login first to submit.