C# TabPage ImageIndex изменить - PullRequest
0 голосов
/ 01 мая 2020

Итак, я работаю с кодом от кого-то другого, и я продолжаю видеть такие вещи:

if (page.ImageIndex != 2)
{ 
    page.ImageIndex = 2; 
}

Теперь, с логической точки зрения, это, кажется, не имеет смысла, поэтому я мне интересно, есть ли какое-то событие, которое происходит, когда вы меняете изображение, которое они не хотят запускать (я искал одно, но я не видел одно - я видел BackgroundImageChanged, но это, кажется, что-то еще), или, может быть, установка значения ImageIndex, даже если оно то же самое, вызывает вспышку sh или мерцание, или что-то еще?

Просто интересно, чего мне не хватает.

Спасибо всем!

1 Ответ

0 голосов
/ 04 мая 2020

Изменение ImageIndex для Windows Элементы управления Forms иногда имеют неожиданные побочные эффекты.

Вы можете увидеть похожую проблему в этом посте, где OP испытывает неожиданный коллапс узлов с их древовидным представлением

Странное поведение автоматического свертывания в древовидной структуре, когда установлен SelectedImageIndex?

Так, например, для TreeView изменение SelectedImageIndex заставляет весь древовидный вид создать новый дескриптор окна, перерисовать заново , а также свернуть все узлы, кроме узла, содержащего рассматриваемый узел.

Вероятно, здесь происходит то же самое, и проверка исходного кода для установщика TabPage ImageIndex подтверждает это, поскольку вызывает перерисовку весь элемент управления вкладками:

https://referencesource.microsoft.com/#system. windows .forms / winforms / managed / system / winforms / TabPage.cs, cec4a25e4fa0d595

set_ImageIndex() => UpdateParent() => parent.UpdateTab() => TabControl.UpdateTabSelection() 

https://referencesource.microsoft.com/#system. windows .forms / winforms / managed / system / winforms / TabControl.cs, 1b31148fc95aa30d

, потому что, конечно, рамки h как покрыть все:

// After changing the Bounds of TabPages, we need to
// make TabPages Redraw.
// Use Invalidate directly here has no performance
// issue, since ReSize is calling low frequence.
tabPages[index].Invalidate();
...