Если список (в режиме подробной информации) прокручивается вниз, а затем вы изменяете размер списка, а если вы изменяете размер столбцов в событии «Изменение размера» или даже в событии макета, содержимое сильно искажается.Как работать с проблемой Windows ListView?
Чтобы воспроизвести, сделать новый C# проект и поместить этот код там:
private void Form1_Load(object sender, EventArgs e)
{
ListView lv = new ListView();
lv.Size = ClientSize;
lv.Anchor = AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Top;
lv.Columns.Add(new ColumnHeader());
lv.Columns.Add(new ColumnHeader());
lv.View = View.Details;
lv.FullRowSelect = true;
lv.Resize += lv_Resize;
Controls.Add(lv);
string[] s = new string[2];
s[0] = "hrd";
s[1] = "igwegmg";
for (int i = 0; i < 20; i++)
{
lv.Items.Add(new ListViewItem(s));
}
lv_Resize(lv, null);
}
private void lv_Resize(object sender, EventArgs e)
{
ListView lv = (ListView)sender;
lv.Columns[1].Width = lv.ClientSize.Width - lv.Columns[0].Width;
}
Выполнить это, прокрутите список вниз немного, изменить размер формы, чтобы показать все элементы путем перетаскивания в нижней части формы вниз.
Измените его размер до тех пор, пока не появится полоса прокрутки, и это ухудшится. Или вместо изменения размера просто увеличивайте и восстанавливайте форму.
Обратите внимание, что есть пучок (в зависимости от того, сколько вы прокрутили) пустых элементов в верхней части списка, вы не можете на них нажимать. Чтобы восстановить его в обычном режиме, вам нужно сделать одну из двух вещей.
Восстановить предметы (не очень хорошо - у меня слишком много предметов, и я теряю положение прокрутки).
вручную, если вы измените размер формы, где появится полоса прокрутки, затем прокрутите полосу прокрутки до нижней части, затем переместите мышь с полосы прокрутки, а затем назад на верхнюю часть полосы прокрутки вы увидите полосу прокрутки измените размер, в этот момент вы можете перетащить полосу прокрутки вверх, а затем вернуться к нормальной.
Если вас RedrawItems
, то, по крайней мере, вы можете увидеть все детали снова, но вы все равно получите пустые пункты в верхней части. Выполнение функции begininvoke
функции, вызывающей RedrawItems
после того, как событие resize/layout не всегда работает.
Любые идеи по этой ошибке? Я действительно не хочу использовать какие-либо другие средства управления или программное обеспечение сторонних разработчиков.
Вы говорите, что «содержание испорчены плохо». Определить. Плохие данные, визуальные артефакты? – DonBoitnott
визуальные артефакты. текст исчезает, а на полпути снова появляется и пустые строки над реальными строками. – Dorf
Вы сами рисуете эти предметы? Это звучит как простая проблема с обновлением. – DonBoitnott