在绘制两条曲线后,我在zedgraph控件上有两条曲线......
PointPairList thresholdList = new PointPairList();
PointPairList powerList = new PointPairList();
private void plotPower()
{
// Create an object to access ZedGraph Pane
GraphPane pane = zedGraphControl1.GraphPane;
LineItem thresholdLine = new LineItem("thresholdLine");
LineItem powerLine = new LineItem("powerLine");
// Set the Threshold Limit
double thresoldLimit = Convert.ToDouble(numAnalysisThreshold2.Value);
// Points
double[] x = new double[]{0, pane.XAxis.Scale.Max};
double[] y = new double[]{thresoldLimit, thresoldLimit};
// Set the threshold line curve list
thresholdList.Add(x, y);
// Set the Power Line curve list
powerdList.Add(XData, YData);
// Add Curves
thresholdLine = pane.AddCurve("", thresholdList, Color.Red, SymbolType.None);
powerLine = pane.AddCurve("", powerList, Color.Red, SymbolType.None);
// Refresh Chart
this.Invalidate();
zedGraphControl1.Refresh();
}
从上面的代码中,我设法将两条曲线绘制为超过阈值线曲线的电源线曲线。
现在我的问题是,如果我想把前面任何一条曲线带到前面......有没有可用的方法(例如:bringittoFront()....)......?
非常感谢您的时间.... :)
答案 0 :(得分:8)
GraphPane包含CurveList属性,CurveList类是List<CurveItem>
的子类。如果为您绘制的每条曲线设置CurveItem.Tag属性,我相信您应该能够使用CurveList.Sort(IComparer<CurveItem>)
方法对曲线项进行排序,并使用Tag
来表示排序顺序
更新6月19日
简单示例:两行,蓝色line2
line2.Tag = 2
和红色line1
line1.Tag = 1
。初始化line2
首先添加到图形窗格中,因此它将显示在顶部。
void GraphInit()
{
var line2 = _graph.GraphPane.AddCurve("Second",
new[] { 0.1, 0.5, 0.9 }, new[] { 0.1, 0.5, 0.1 }, Color.Blue);
line2.Tag = 2;
var line1 = _graph.GraphPane.AddCurve("First",
new[] { 0.1, 0.5, 0.9 }, new[] { 0.1, 0.5, 0.9 }, Color.Red);
line1.Tag = 1;
_graph.Refresh();
}
要进行排序,首先要实现一个实现IComparer<CurveItem>
的类,然后根据CurveItem
Tag
属性的数值按升序对曲线项进行排序:
class CurveItemTagComparer : IComparer<CurveItem>
{
public int Compare(CurveItem x, CurveItem y)
{
return ((int)x.Tag).CompareTo((int)y.Tag);
}
}
要执行重新排序和更新图形,请为排序按钮实现以下事件处理程序:
void SortButtonClick(object sender, EventArgs e)
{
_graph.GraphPane.CurveList.Sort(new CurveItemTagComparer());
_graph.Refresh();
}
现在,当点击排序按钮时,曲线将被排序,使得具有最低标签值的曲线(即line1
)将被绘制在顶部。另外,请注意图例中的曲线顺序会随之改变。
答案 1 :(得分:6)
有一种非常简单的方法。使用CurveList
课程中的Move()
方法。例如:
zedGraphControl1.GraphPane.CurveList.Move(index,relativePos)
将relativePos
设置为-1
会将对象移动到列表中较早的位置,而1
会将其移动一个位置。要将项目移动到列表的开头,请使用较大的负值(例如-999
)。要将其移动到列表的末尾,请使用较大的正值。
答案 2 :(得分:3)
而且,对于谁需要它,这是vb.net的IComparer类的代码:
Public Class CurveItemTagComparer
Implements IComparer(Of CurveItem)
Function Compare(ByVal x As ZedGraph.CurveItem, ByVal y As ZedGraph.CurveItem) As Integer _
Implements System.Collections.Generic.IComparer(Of CurveItem).Compare
Return CInt(x.Tag).CompareTo(CInt(y.Tag))
End Function
End Class
乔瓦尼