Что может привести к переупорядочению ControlCollection после Show()?

Я затрудняюсь объяснить, почему элементы в ControlCollection будут переупорядочены после метода Show() - возможно, некоторые здесь могут знать. Я работаю над старым приложением, написанным на VB.NET с использованием.NET 2.0/VS2008 (юк, я знаю... но это работает)

Нет известных событий, которые запускаются в результате Show (например, VisibleChanged), поэтому это неожиданное поведение.

Вот код:

    Friend Sub RefreshAlarmStatus(ByVal conditionID As Integer, ByRef alarmPanel As Panel) Handles m_AlarmPopUp.RefreshAlarm
    ...
    For ControlIndex = 0 To alarmPanel.Controls.Count - 1
        If alarmPanel.Controls(ControlIndex).Tag = conditionID Then
            alarmPanel.Controls(ControlIndex).Show()
            DynamicCommandLabel = alarmPanel.Controls(ControlIndex).Controls.Item(0).Controls.Item(0)
            DynamicInfoLabel = alarmPanel.Controls(ControlIndex).Controls.Item(1)
            DynamicStatusLabel = alarmPanel.Controls(ControlIndex).Controls.Item(0).Controls.Item(1)
            DynamicPanel = alarmPanel.Controls(ControlIndex)
            bFound = True
            Exit For
        End If
    Next

Я поместил пару строк отладки в код и получил это:

01:27:59.524 - RefreshAlarmStatus: Before Show() - alarmPanel.Controls.Item(0).Tag=2
01:27:59.525 - RefreshAlarmStatus: Before Show() - alarmPanel.Controls.Item(1).Tag=3
01:27:59.525 - RefreshAlarmStatus: Before Show() - alarmPanel.Controls.Item(2).Tag=4
The alarmPanel.Controls(ControlIndex).Show() operation happens here
01:27:59.529 - RefreshAlarmStatus: After Show()  - alarmPanel.Controls.Item(0).Tag=3
01:27:59.529 - RefreshAlarmStatus: After Show()  - alarmPanel.Controls.Item(1).Tag=2
01:27:59.529 - RefreshAlarmStatus: After Show()  - alarmPanel.Controls.Item(2).Tag=4

Странно то, что это случается только иногда, а не постоянно. В результате, я позже использую ControlIndex. Теперь я изменил свой код, чтобы сделать Show независимым от for for next, и кажется, что все работает.

Стоит ли ожидать, что порядок элементов управления может измениться после любого метода - например, Show()? Или это ошибка? Или какое-то другое объяснение?

0 ответов

Другие вопросы по тегам