#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
переменной-членом класса? И находятся ли оба обработчика событий в одном классе?