У меня есть настраиваемая панель, предназначенная для отображения сплошного цвета фона, цвета фона градиента или изображения.Застрял в петле OnPaint с настраиваемым элементом управления, полученным с панели
Я переопределены как свойство BackgroundImage и метод OnPaint так:
protected override void OnPaint(PaintEventArgs pe){
Rectangle rc = new Rectangle(0, 0, this.Width, this.Height);
if (this.DrawStyle != DrawStyle.Picture){
base.BackgroundImage = null;
if (this.DrawStyle == DrawStyle.Solid){
using (SolidBrush brush = new SolidBrush(this.PrimaryColor))
pe.Graphics.FillRectangle(brush, rc);
}
else if (this.DrawStyle == DrawStyle.Gradient){
using (LinearGradientBrush brush =
new LinearGradientBrush(
rc, this.PrimaryColor, this.SecondaryColor, this.Angle))
pe.Graphics.FillRectangle(brush, rc);
}
}
else if (this._BGImage != null)
base.BackgroundImage = this._BGImage;
}
public override Image BackgroundImage{
get { return this._BGImage; }
set { this._BGImage = value; }
}
Причина в том, что контроль должен быть достаточно гибким, чтобы изменить фоновый вид (Solid, градиент или изображения) во время поэтому управление удерживается на установленном фоновом изображении и представляет его, когда это необходимо.
Однако у меня проблема.
Если я не устанавливаю фоновое изображение, проблем нет. OnPaint вызывается примерно 5 раз, а затем все идет нормально.
Однако, когда я устанавливаю фоновое изображение, он, кажется, сходит с ума, снова и снова называет OnPaint снова и снова.
Это явно имеет отношение к переопределению фонового изображения, и это проблема, потому что она висит, и ничего на панели не обновляется, пока я не изменю внешний вид панели.
Так что, я думаю, вопрос у меня есть, почему он застревает в этом цикле OnPaint, когда я устанавливаю фоновое изображение?
Я перевернул сообщение обратно на исходный вопрос, так как последние обновления удалили фактический вопрос. – LarsTech