Я написал пользовательский элемент управления, который поддерживает прозрачный фон (между прочим).
Однако я обнаружил, что, когда фон прозрачен и вы меняете текст пользовательского элемента управления, предыдущий текст по-прежнему отображается на экране под новым текстом, что делает невозможным его чтение.
Я уже полгода работаю в поисковых системах, нахожу все предложения, которые не срабатывали в моем случае, большинство из них включали рисование родительского элемента управления на растровое изображение и рисование этого растрового изображения на поверхности моего элемента управления.
Однако в моем случае родительский элемент управления также прозрачен, поэтому я попытался подойти к уровню формы, как предлагалось here, но я получал InvalidArgumentException, . Я попытался сделать недействительным родительский элемент управления, например предложенный here, но не повезло или.Обновить отображение прозрачного пользовательского элемента управления
мой код в основном это (округляется до минимума):
protected override CreateParams CreateParams
{
get
{
CreateParams cp = base.CreateParams;
cp.ExStyle |= 0x20;
return cp;
}
}
protected override void OnPaintBackground(PaintEventArgs e)
{
if(this.BackColor != Color.Transparent)
{
base.OnPaintBackground(e);
}
}
Winforms/sigh ... Вы можете попытаться аннулировать все элементы управления ('form.Invalidate()'), но это вызовет много мерцания. Затем вы попытаетесь уменьшить мерцание (двойная буферизация, растровые изображения и т. Д.). И затем вы переключаетесь на wpf. – Sinatr
@Sinatr Я бы с удовольствием переключился на wpf, к сожалению, мой босс, похоже, считает, что кривая обучения слишком велика, а крайний срок проекта слишком короткий ... любые другие предложения? –
Вы не перекраиваете фон и, следовательно, не перерисовываете пиксели старого текста. Так что это вполне ожидаемо. UserControl поддерживает прозрачность, просто установите для BackColor значение Transparent. Удалите два метода, которые вы опубликовали.Рисование текста на прозрачном фоне вообще неразумно, пиксели сглаживания будут иметь неправильные цвета, что делает текст очень уродливым. Лучше всего описывается как «бобби». Чтобы избежать этого, вы должны использовать TextRenderingHint.SingleBitPerPixelGridFit. –