У меня проблема с проектом Windows Forms, который я могу воспроизвести только на Windows 10
машине (в Windows 7 он работает). Я думаю, что могу изолировать источник проблемы, а именно, если я включу двойную буферизацию и установлю FormBorderStyle
на None
, а затем, если я изменю размер формы, например. в обработчике событий части фона и некоторые элементы управления не перерисовываются. Тоже так, что иногда срабатывает (один раз из пяти).
Не перерисовано выглядит так (часто немного иначе):
и так должно получиться:
Чтобы воспроизвести проблему, просто поместите пару элементов управления в форму (может быть, количество также важно), включите двойную буферизацию, переопределив CreateParams
, FormBorderStyle=None
(с другим стилем границы это работает!).
Код позади:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
protected override CreateParams CreateParams
{
get
{
CreateParams cp = base.CreateParams;
cp.ExStyle |= 0x02000000; // Turn on WS_EX_COMPOSITED
return cp;
}
}
private bool small = true;
private void button1_Click(object sender, EventArgs e)
{
//toggle the form's size
Height = Height + 300*(small?-1:1);
small = !small;
}
private void button5_Click(object sender, EventArgs e)
{
Close();
}
}
Вопрос:
Это известная ошибка от MS (или, возможно, намерение избавиться от форм Windows;)) в Windows 10
?
Есть идеи?
Двойная буферизация и отсутствие граница должна быть.
Обновление: у меня Win 10 Pro версии: 1703; Сборка 15063.1155.
Обновление2: Тест на Win 10 Pro Версия: 1709; Сборка 16299.492 - та же проблема.
Обновление 3: Тест на Win 10 Домашняя версия: 1803 - намного лучше (мне потребовалось несколько минут тестирования, чтобы воспроизвести его), но проблема все еще возникает. Этот тест проводился на другом компьютере с другой графической картой.
Обходной путь:
Боюсь, мне придется пойти по этому пути в качестве обходного пути A: Удалите строку заголовка в Windows Forms и установите FormBorderStyle
, например, на FixedToolWindow
.