2017-05-03 4 views
1

이 내 차트 지금 모습입니다을 보여주는이 :서식 차트 데이터 포인트와 레이블의 도구 설명

  1. AxisXDateTimeDiagramm.ChartAreas[0].AxisX.LabelStyle.Format = "dd.MM.yy HH";로 포맷 된 것입니다 :

    enter image description here

    나는이 문제가 . 이것은 작동하지만 몇 시간이 지나면 레이블이 잘리는 것을 볼 수 있습니다. X 축의 각 레이블에 대해 마우스 오버 툴팁을 설정하려면 어떻게해야합니까?

  2. 시리즈 1은 보조 AxisY2 : Diagramm.Series["S1"].YAxisType = AxisType.Secondary;에 배치됩니다. 나는 주어진 값 1088,55이 1089 €로 반올림하지만 당신이 108,855 €로 변환됩니다 볼 수한다 알고있는 것처럼 나는 Diagramm.ChartAreas[0].AxisY2.LabelStyle.Format = "C0";

와 통화 축을 형식의. 하지만 왜? 값이 이미 지점 2

업데이트 ... 더블로 제공됩니다 : 감사 TAW에, .,을 변환이

  • 툴팁

      을 작동 내 시리즈 1가 만들어집니다 위해 :

      foreach (DataPoint dp in Diagramm.Series["S1"].Points) { if (dp.YValues[0] > 0) { dp.ToolTip = dp.YValues[0].ToString("C0") + " Umsatz für Stunde " + dp.AxisLabel.ToString() + ""; } else { dp.IsValueShownAsLabel = false; } }

    나는에서 시간을 가지고 싶습니다은 "dd.MM.yy HH"으로 형성됩니다. dp.AxisLabel.ToString() 대신 시간에 액세스하려면 어떻게해야합니까? 포인트 3

    업데이트 : TAW 덕분에, DateTime.FromOADate(Convert.ToDouble(dp.XValue.ToString())).Hour

    감사 2 & 3 우리가 큰 하나 남아 있습니다 코멘트에서 해결 된 부분부터

  • +0

    _1088,55는 1089_로 반올림해야합니다. 바로 오타입니다. 맞습니까? – TaW

    +0

    'dp.ToolTip = dp.YValues ​​[0] .ToString ("C0") + "Umsatz für Stunde"+ dp.XValue.ToString ("HH") + ""; – TaW

    +0

    @TaW 오타가 아닐까요? . 1088,55는 내 주어진 가치이며 1089로 반올림해야합니다. 실제로 1088,55를 108855로 바꿉니다. –

    답변

    1

    하고있다 : 우리가 어떻게 툴팁 얻을 수 있습니다 축 레이블의 경우.

    미리 정의 된 축 레이블은 없습니다. Axis 자체가

    그래서 우리는 우리가 Label을 쳤을 때의 팁 값을 설정해야에 .. ToolTip을 지원하지만, #VALX 등 같은 Keywords을 허용하지 않습니다. 다음은이를 수행하는 방법입니다.

    MouseMove 이벤트를 코드화하여 Label을 테스트합니다. 그런 다음 우리가 찾은 데이터를 사용하여 ToolTip 문자열을 만듭니다.

    그것은 오히려 간단 시작합니다

    • 우리는 우리가 AxisLabels
    • 중 하나 명중 한에 대한 확인 HittTest
    • 그런 다음 우리가 CustomLabel

    에 개체를 캐스팅 할이 재미있다 : 우리는 평범하게 사용하고 있으며, 자동으로 만들어진 AxisLabels이지만 HitTest이 반환하는 것은 0123입니다.!!

    결과 중 하나는 Value이 아니라 ToPositionFromPosition 값입니다. 라벨이 자동으로 만들어지기 때문에 라벨을 대칭으로 배열 할 수 있습니다. 그래서 얻을 당신의 x 축이 DateTime 우리가 지금 DateTime로 다시 변환하고 LabelStyle에 사용 된 것과 같은 형식의 문자열로 끝을 포맷 할 수 있습니다 평소와 같이 double로 변환 보유하고 있기 때문에 우리는 단순히 중간을 취할 수있는 Value ..

    . 당신은 물론 .. 여기에 다른 형식을 선택할 수있는 당신이하려는 경우와

    private void chart_MouseMove(object sender, MouseEventArgs e) 
    { 
        HitTestResult hit = chart.HitTest(e.X, e.Y, ChartElementType.AxisLabels); 
    
        if (hit != null && hit.ChartElementType == ChartElementType.AxisLabels) 
        { 
         Axis ax = chart.ChartAreas[0].AxisX; 
         var lab = hit.Object as CustomLabel; 
         if (lab == null || lab.Axis != ax) return; 
         double d = (lab.ToPosition + lab.FromPosition)/2d; 
         DateTime dt = DateTime.FromOADate(d); 
    
         string tip = dt.ToString(ax.LabelStyle.Format); 
         ax.ToolTip = tip; 
        } 
    } 
    

    하나의 문제는 오히려 잘 축을 칠하거나 다른 도구 설명이 발생하지 않습니다 필요가 있다는 것입니다.

    enter image description here

    당신은 당신의 자신의 ToolTip를 사용하여이 문제를 피할 수 있지만이 queston의 범위를 넘어; MouseMove에서 시작/중지하는 Timer이 필요합니다. Tick 이벤트에서 툴팁 문자열을 만들면 팁이오고 멋지게 나오는지 확인해야합니다.

    +0

    와우! 위대한 작품과 설명에 감사드립니다! 놀랄 만한... –

    관련 문제