2016-07-05 22 views
1

この問題にはわかりませんが、とにかく尋ねる簡単な解決策があると確信しています。私はこのコードを持っている:C#グラフの線分がアンカーポイントがオフのときに消えますAxisビュー

HorizontalLineAnnotation h = new HorizontalLineAnnotation(); 
h.AnchorX = startOfNewGraph; 
h.Width = newGraphWidth; 
h.AxisX = resultGraph.ChartAreas[0].AxisX; 
h.AxisY = resultGraph.ChartAreas[0].AxisY; 
h.IsSizeAlwaysRelative = false; 
h.ClipToChartArea = resultGraph.ChartAreas[0].Name; 
originalHLAAnchors.Add(h.AnchorX); 
originalHLAWidths.Add(h.Width); 
resultGraph.Annotations.Add(h); 

私の問題は私のグラフビューは、そのAnchorXがビューの外にある場合にスケーリングされたときに注釈が消えるということです。注釈のどちらの部分もビューにない場合でも、私はまだそれらの間の線を見ることができますので、私はそれを維持したいと思います。これを改善するために私が試みたことは次のとおりです。

private void resultGraph_AxisViewChanged(object sender, ViewEventArgs e) 
    { 

     if (e.Axis == resultGraph.ChartAreas[0].AxisX) 
     { 
      ResizeHorizontalAnnotations(); 
     } 
    } 

private void ResizeHorizontalAnnotations() 
    { 
     int count = 0; 
     for (int i = 0; i < resultGraph.Annotations.Count; i++) 
     { 
      if (resultGraph.Annotations[i] is HorizontalLineAnnotation) 
      { 
       if (originalHLAAnchors[count] < resultGraph.ChartAreas[0].AxisX.ScaleView.ViewMinimum) 
       { 
        resultGraph.Annotations[i].AnchorX = resultGraph.ChartAreas[0].AxisX.ScaleView.ViewMinimum + 0.0005; 
        if ((originalHLAAnchors[count] + originalHLAWidths[count]) >= resultGraph.ChartAreas[0].AxisX.ScaleView.ViewMaximum) 
        { 
         resultGraph.Annotations[i].Width = resultGraph.ChartAreas[0].AxisX.ScaleView.ViewMaximum - resultGraph.ChartAreas[0].AxisX.ScaleView.ViewMinimum; 
        } 
        else 
        { 
         resultGraph.Annotations[i].Width -= resultGraph.ChartAreas[0].AxisX.ScaleView.ViewMinimum - originalHLAAnchors[count]; 
        } 
       } 
       else 
       { 
        resultGraph.Annotations[i].AnchorX = originalHLAAnchors[count]; 
        resultGraph.Annotations[i].Width = originalHLAWidths[count]; 
       } 
       resultGraph.Annotations[i].Visible = true; 
       count++; 
      } 
     } 
     resultGraph.UpdateAnnotations(); 
    } 

しかし、このコードはどちらも機能していないようです。注釈は最初に試したときに表示されなかったので、AnchorXに0.005を追加して、表示の最小値を少し上回らなければならないかどうかを確認しました。これはどちらもうまくいかなかった。注釈のローカル値をチェックするとき、数字は正しいです。アノテーションは正しく表示されず、まったく表示されません。 UpdateAnnotations()はビューをズームアウトし、注釈も無効にします。

アイデア?

答えて

0

AnchorXプロパティに直接固定されたAnnotationsのように見えるか、またはアンカーがビュースケールに存在しなくなった後にAnchorDataPointを使用して消えます。

バグや機能であるかどうかは不明ですが、位置を直接設定することで回避できます。

ですから、サイズと位置にAnnotationh.Xプロパティと一緒にh.Widthを使用する必要があります。

h.X = startOfNewGraph; 
    h.Width = newGraphWidth; 

あなたは垂直Annoationを配置する方法私たちを示しませんでした。おそらくDataPointに固定されていますか?またはYプロパティを設定しますか?どちらもx軸にズームするためには両方とも動作するはずです。

Annotation.XAnnotation.AnchorXの両方のデフォルト値がdouble.NaNであることに注意してください。これは通常、チャートの用語で「自動」を意味します。この場合、私はそれが「適用されない」ことを意味すると思います。

両方のプロパティを設定すると、Annotation.Xが勝ちます。したがって、double.NaNに戻すと、Annotation.AnchorXが再びアクティブになります。

+0

私は最終的に今それに戻って持って、あなたの最初の文が答えです。私が必要としたのはAnchorXではなくXに値を設定することだけでした.Xが見えなくてもうまくいきました。それが何か簡単だと分かった! – cl12

0

ではなくシリーズを使用して、あなたは、アンカーおよび.NETチャートの注釈をリサイズ問題について気にする必要があるドント:

private void Line(Point start, Point end) 
{ 
    chart1.Series.Add("line"); 
    chart1.Series["line"].ChartType = SeriesChartType.Line; 
    chart1.Series["line"].Color = System.Drawing.Color.Red; 
    chart1.Series["line"].Points.AddXY(start.X, start.Y); 
    chart1.Series["line"].Points.AddXY(end.X, end.Y); 
} 
関連する問題