тогда все работает как положено.
я проблема с проектом 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 10
?
Есть идеи?
Двойная буферизация и без границ должна быть.
Обновить: У меня версия Win 10 Pro: 1703; Сборка 15063.1155.
Update2: Тест на Win 10 Pro Версия: 1709; Сборка 16299.492 - такая же проблема.
Update3: Тест на Win 10 Home Version: 1803 - намного лучше (мне понадобилось несколько минут тестирования, чтобы воспроизвести его), но проблема все еще появляется. Этот тест был выполнен на другом компьютере с другой графической картой.
Временное решение:
Боюсь, я должен пойти по этому пути в качестве обходного путиA: Удалить строку заголовка в Windows Forms и установитьFormBorderStyle
например, чтобыFixedToolWindow
.