C# MSCharts PixelPositionToValue不';对于对数x轴,t似乎不起作用
我正在使用MSCharts,并已将x轴IsLogarithmic设置为true。我遇到的第一个问题是图表在第一次显示时崩溃了 我在以下网站找到了答案: 及 因此,我不会在设计时设置isLogarithmic,而是在运行时设置,当我有一个系列时:C# MSCharts PixelPositionToValue不';对于对数x轴,t似乎不起作用,c#,.net,forms,charts,mschart,C#,.net,Forms,Charts,Mschart,我正在使用MSCharts,并已将x轴IsLogarithmic设置为true。我遇到的第一个问题是图表在第一次显示时崩溃了 我在以下网站找到了答案: 及 因此,我不会在设计时设置isLogarithmic,而是在运行时设置,当我有一个系列时: 没有X值的X值我发现了以下文章: 这表明,要使PixelPositionToValue在绘制事件之外工作,需要在图表区域调用ReCalc()。ReCalc()在我的MSChart版本中不存在,但有一个函数RecreacteAxesCale(
- 没有X值的X值我发现了以下文章:
这表明,要使PixelPositionToValue在绘制事件之外工作,需要在图表区域调用ReCalc()。ReCalc()在我的MSChart版本中不存在,但有一个函数RecreacteAxesCale()(请参阅),调用它似乎可以修复不一致的行为
不幸的是,如果轴是对数的,我仍然需要将该值转换为线性,但至少现在可以预测其行为。我找到了以下文章: 这表明,要使PixelPositionToValue在绘制事件之外工作,需要在图表区域调用ReCalc()。ReCalc()在我的MSChart版本中不存在,但有一个函数RecreacteAxesCale()(请参阅),调用它似乎可以修复不一致的行为
不幸的是,如果轴是对数的,我仍然需要将值转换为线性,但至少现在行为是可预测的。示例已删除。您需要认真对待此注释,轴映射是惰性完成的。直到油漆好了才需要钉牢。它可能在第一次绘制之后工作,但由于绘制是一项低优先级任务,因此仍有可能获得过时的值。只有GetPosition()才是真正安全的。@Hans:谢谢这一点-这促使我在网络上进一步挖掘,并且我找到了一个解决不一致计算方法的正确方法(尽管我仍然不希望对数轴和线性轴有不同的代码)。请参阅下面我的答案。示例已删除。您需要认真对待此注释,轴映射是惰性完成的。直到油漆好了才需要钉牢。它可能在第一次绘制之后工作,但由于绘制是一项低优先级任务,因此仍有可能获得过时的值。只有GetPosition()才是真正安全的。@Hans:谢谢这一点-这促使我在网络上进一步挖掘,并且我找到了一个解决不一致计算方法的正确方法(尽管我仍然不希望对数轴和线性轴有不同的代码)。看到我下面的答案。虽然这个问题看起来很死板,但当我在谷歌上搜索“PixelPositionToValue对数”时,它实际上是最好的结果。这个Q/A对非常有用-做得好dominic!虽然这个问题看起来很死板,但当我在谷歌上搜索“PixelPositionToValue对数”时,它实际上是最重要的结果。这个Q/A对非常有用——干得好,多米尼克!int GetXValue(MouseEventArgs e, Axis axis) { return axis.IsLogarithmic ? Math.Pow(axis.LogarithmBase, axis.PixelPositionToValue(e.X)) : axis.PixelPositionToValue(e.X) }