Как скрыть прямоугольную аннотацию при прокрутке - PullRequest
0 голосов
/ 08 марта 2019

1 - у меня есть вертикальная аннотация строки, чтобы показать текущую дату и аннотацию прямоугольника, при прокрутке строки он скрывает ее, но прямоугольник нет!

(я знаю, что должен использовать RA.visible=false, ноМне нужно событие и условие)

2 - я хочу исправить вид графика, когда он отображается в начале, чтобы показать сегодняшнюю линию, потому что я должен переместить полосу прокрутки, чтобы получить ее.

это код аннотации:

  VerticalLineAnnotation LA = new VerticalLineAnnotation();
  DateTime today = DateTime.Now;
  ChartArea ca= GanttChart.ChartAreas[0];
  LA.AxisX = ca.AxisX;
  LA.AxisY = ca.AxisY;
  LA.Y = DateTime.ParseExact(today.ToShortDateString(), "dd/MM/yyyy", null).ToOADate();

  LA.X = LA.Y;
  LA.LineWidth = 1;
  LA.IsInfinitive = true;
  LA.LineColor = Color.Red;
  LA.ClipToChartArea = ca.Name;
  RectangleAnnotation RA = new RectangleAnnotation();
  RA.AxisX = ca.AxisX;
  RA.IsSizeAlwaysRelative = false;
  RA.ToolTip = "Aujourd'hui \nLe "+today.ToString("dd MMM yyyy");
  RA.Width = 20 * 0.07;         
  RA.Height = 8 * 0.01;        
  RA.LineColor = Color.Red;
  RA.BackColor = Color.Red;
  RA.AxisY = ca.AxisY;
  RA.Y = -RA.Height;
  RA.X = LA.X - RA.Width / 2;
  GanttChart.Annotations.Add(LA);

  GanttChart.Annotations.Add(RA);

РЕДАКТИРОВАТЬ моя проблема при прокрутке, прямоугольник все ещеМожет быть, мне нужно знать ширину области диаграммы?

enter image description here

update Я попробовал этот кодно прямоугольник больше не виден!

private void GanttChart_AxisViewChanged(object sender, ViewEventArgs e)
    {


        Axis ay = GanttChart.ChartAreas[0].AxisY;
        if (ay.Minimum == ay.ScaleView.Position)
        { RA.Visible = e.NewPosition == e.Axis.Minimum; }
        else
        { RA.Visible = e.NewPosition == e.Axis.Minimum; }
    }

Ответы [ 2 ]

1 голос
/ 08 марта 2019

Все аспекты прокрутки и масштабирования обрабатываются элементами ScaleView осей.

Для адаптации графика во время или после прокрутки вы можете использоватьСобытия AxisViewChanging и AxisViewChanged.

Для сравнения состояния прокрутки и прокрутки вы можете проверить, например, ScaleView.Position или e.NewPosition с axis.Minimum или e.Axis.Minimum.

Пример:

private void chart1_AxisViewChanged(object sender, ViewEventArgs e)
{
    if (e.NewPosition == e.Axis.Minimum)
    { action1 }  // unscrolled
    else
    { action2 }  // scrolled
}

В вашем случае тело может быть упрощено до: RA.Visible = e.NewPosition == e.Axis.Minimum;

Примечание: В приведенном выше примере не указывается, какую ось наблюдать, т.е. наблюдаются обе оси.Например, если вы хотите смотреть только ось y , вы должны изменить его на:

private void chart1_AxisViewChanged(object sender, ViewEventArgs e)
{
    Axis ay = chart1.ChartAreas[0].AxisY;
    if (ay.Minimum == ay.ScaleView.Position) 
    { action1 }
    else
    { action2 }
}

В вашем случае (тип гистограммы прокручивается горизонтально) вы, скорее всего, захотитесмотреть только ось Y .

0 голосов
/ 11 марта 2019

это решение, которое сработало для меня, если кому-то это нужно

  private void GanttChart_AxisViewChanged(object sender, ViewEventArgs e)
    {
        // LA VerticalLineAnnotation
        if (LA.Y > e.Axis.ScaleView.ViewMaximum || LA.Y < e.Axis.ScaleView.ViewMinimum)
        { RA.Visible = false; } 

        else
        {
            RA.Visible = true;
        } 
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...