У меня есть пользовательский элемент управления, который отображает градиент цветов, который после создания будет постоянным.
Usercontrol не содержит никаких элементов управления, не уверен, нужно ли мне добавлять изображение или динамически добавлять его.
Над этим изображением я хотел бы отобразить строку, которая будет отображать текущий результат. У меня нет проблем с созданием градиентного изображения на карте, однако я бы хотел как-то его кэшировать, чтобы каждый раз, когда я обновлял индикатор (вызывал CurrentValue из родительской формы), он помещал линию индикатора над градиентным изображением. Это обновляется примерно 30 раз в секунду, таким образом, из-за того, как работает приведенный ниже код, он перерисовывает градиент каждый раз, что мигает.
Вот пример кода:
namespace Maps.UserControls
{
public partial class UserControlLegend : UserControl
{
private double m_CurrentValue;
public double CurrentValue
{
get
{
return m_CurrentValue;
}
set
{
m_CurrentValue = value;
RefreshValue();
}
}
public UserControlLegend()
{
InitializeComponent();
}
private void UserControlLegend_Paint(object sender, PaintEventArgs e)
{
if (b == null)
{
g = e.Graphics;
b = new System.Drawing.Bitmap(menuWidth, menuHeight, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
// Code here that draws Menu
// Cache bitmap here?
g.Dispose();
}
}
private void RefreshValue()
{
this.Refresh();
g = this.CreateGraphics();
g.DrawImage(b, 0, 0);
//Code to Calcuate current Indicator Location
int x3 = 0;
// Draws current indicator correctly
g.DrawLine(new Pen(new SolidBrush(Color.Black)), this.Width / 2 - 15, x3, this.Width / 2 - 5, x3);
g.Dispose();
}
}
}