【问题标题】:C# StripLine (chart) drawing by click onto the chartC# StripLine(图表)通过点击图表绘制
【发布时间】:2013-06-10 14:32:55
【问题描述】:

社区,

这是我在这里的第一个问题。对于我遇到的所有其他问题,这方面通常都有答案。为此,我没有找到。这是我的问题:

我有一个图表,我想在图表上单击鼠标时添加一条垂直星线。到目前为止,我正在使用该代码:

chartSettlingCurve.ChartAreas[0].CursorX.SetCursorPixelPosition(new Point(e.X, e.Y), true);
double pX = chartSettlingCurve.ChartAreas[0].CursorX.Position; //X Axis coordinate Mouse
            DataPoint dataPoint = chartSettlingCurve.Series[0].Points.FindByValue(nearestPreceedingValue(nearestPreceedingValue(pX)), "X");
            labelTab3Test.Text = Convert.ToString(dataPoint);

            DataPoint maxValuePoint = chartSettlingCurve.Series[0].Points.FindMaxByValue();

            StripLine stripLineEnd = new StripLine();
            stripLineEnd.BorderColor = Color.Blue;
            stripLineEnd.IntervalOffset = dataPoint.XValue;
            stripLineEnd.Text = "End";

这段代码在我点击图表的每一点都会生成一条带状线,但我只想要一条线。所以如果它仍然是一条带状线,它会被另一个位置的新线替换。

如果你能帮助我会很好。如果你不明白我的问题,请询问。

谢谢

【问题讨论】:

  • 如果你重用 stripLineEnd 并且只设置它的 IntervalOffset OnClick 怎么办?或者您是否必须将 StripLine 添加到图表的某个地方?如果是,请在添加新的之前删除所有 StirpLines。
  • 嗨,谢谢您的回答,问题是最后我想要两条带状线(第一个称为“stripLineStart”,第二个称为“stripLineEnd”)但用户应该有可能改变两个都。因此,例如,如果用户对“stiplineStart”的位置不满意,他可以更改它,但“stiplineEnd”不应通过striplineStart 的新定位来更改。如果它对你有帮助,我可以尝试创建一些图片。谢谢
  • 那么记住两条带状线并删除/添加新的或编辑你想要的带状线的intervalOffset。您应该说明您使用哪个图表控件,并至少添加您的点击事件处理程序方法的所有代码。
  • 我尝试使用以下方法擦除“striplineStart”:foreach (var element in chartSettlingCurve.ChartAreas[0].AxisX.StripLines) { MessageBox.Show(element.Tag.ToString()); if (element.Tag == "start") { element.Dispose(); } } 但这会导致运行时错误。如何安全地删除带状线?谢谢

标签: c# charts


【解决方案1】:

一个可行的解决方案是:

            for (int j = 0; j < chartSettlingCurve.ChartAreas[0].AxisX.StripLines.Count; j++)
            {
                if (chartSettlingCurve.ChartAreas[0].AxisX.StripLines[j].Tag.ToString() == "end")
                {
                    chartSettlingCurve.ChartAreas[0].AxisX.StripLines.RemoveAt(j);
                    j--;
                }
            }

或作为替代:

            bool loop = true;
            while (loop)
            {
                loop = false;
                foreach (var element in chartSettlingCurve.ChartAreas[0].AxisX.StripLines)
                {
                    if (element.Tag.ToString() == "end")
                    {
                        chartSettlingCurve.ChartAreas[0].AxisX.StripLines.Remove(element);
                        loop = true;
                        break;
                    }
                }
            }

【讨论】:

    【解决方案2】:

    您可以使用以下代码删除所有带状线;

            while (chartSettlingCurve.ChartAreas[0].AxisX.StripLines.Count > 0)
            {
                chartSettlingCurve.ChartAreas[0].AxisX.StripLines.Remove(hartSettlingCurve.ChartAreas[0].AxisX.StripLines.Last());   
            }
    

    你可以添加一些代码。

    【讨论】:

      猜你喜欢
      • 2019-12-12
      • 1970-01-01
      • 2011-12-29
      • 2020-04-11
      • 2012-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多