Как непрерывно изменять параметр в событии Paint

#c#

#c#

Вопрос:

Я создаю программу для интерактивного отображения давления на ногу. Большее давление обозначается большим диаметром эллипса. Я работаю над событиями рисования метки. Вот обработчик события:

 private void labelGrad2_Paint(object sender, PaintEventArgs e)  
        {
            GraphicsPath gp = new GraphicsPath();


            int weight_forefoot_left;

            weight_forefoot_left = Convert.ToInt32( l_press05   l_press06   l_press07);  // summing forefoot pressure sensors
            size_pressure_forefootLeft = (weight_forefoot_left * 2 );    //2 is based on trial and error for display only

            //protection diameter
            if (size_pressure_forefootLeft == 0 ){
                size_pressure_forefootLeft = 1;
            }
            if (size_pressure_forefootLeft > 26) {
                size_pressure_forefootLeft = 26;    //protection diameter display
            }


            //---variable sizing---------
            labelGrad_forefoot_left.Font = new Font("MS UI Gothic", size_pressure_forefootLeft);

            int x_forefoot = (pictureBox_CoP.Location.X - (labelGrad_forefoot_left.Size.Width / 2))    58;   //location of left x corner in pictureBox_CoP
            int y_forefoot = (pictureBox_CoP.Location.Y - (labelGrad_forefoot_left.Size.Height / 2))   100;   //location of left y corner in pictureBox_CoP


            labelGrad_forefoot_left.Location = new Point(x_forefoot, y_forefoot);
            labelGrad_forefoot_left.BackColor = Color.White;
            gp.AddEllipse(labelGrad_forefoot_left.ClientRectangle);

            PathGradientBrush pgb = new PathGradientBrush(gp);

            pgb.CenterPoint = new PointF(labelGrad_forefoot_left.ClientRectangle.Width / 2,
                                         labelGrad_forefoot_left.ClientRectangle.Height / 2);
            pgb.CenterColor = Color.Red;
            pgb.SurroundColors = new Color[] { Color.Blue}; 

            pgb.SetBlendTriangularShape(.5f, 1.0f);
            pgb.FocusScales = new PointF(0f, 0f);

            e.Graphics.FillPath(pgb, gp);

            pgb.Dispose();
            gp.Dispose();

       }

private void timer1_Tick(object sender, EventArgs e)  
        {
            size_pressure_forefootLeft = trackBar1.Value;
            textBox4.Text = Convert.ToString( size_pressure_forefootLeft);

            this.Invalidate();
            this.Update();
        }
  

Мне нужно постоянно изменять переменную «size_pressure_forefootLeft».
Я пытался использовать событие timer, но событие timer не имеет PaintEventArgs, в строке ошибка e.Graphics.FillPath(pgb, gp) .
Как с этим справиться?

Комментарии:

1. Для непрерывного обновления просто вызовите invalidate или refresh для элемента управления, когда вам нужно его перерисовать

2. @TheLethalCoder : Спасибо за ответ, я пытался ввести invalidate в событие таймера, но sill не может также в событии labelGrad2_Paint, не могли бы вы дать мне другой ключ ..?

3. Покажите нам код для события timer и почему он не работает, без этого я не могу помочь

4. @TheLethalCoder Я добавил событие timer1 в приведенный выше код, отображение textbox4правильно на основе значения панели треков, но переменная size_pressure_forefootLeft недоступна для paint_event.

5. Является size_pressure_forefootLeft переменной-членом класса? И находятся ли оба обработчика событий в одном классе?