在Show()之后会导致ControlCollection重新排序的原因是什么?

时间:2014-05-23 21:16:19

标签: .net vb.net .net-2.0 controlcollection

我无法解释为什么ControlCollection中的项目会在Show()方法之后重新排序 - 也许有些人可能知道。我正在使用.NET 2.0 / VS2008编写一个用VB.NET编写的旧应用程序(yuk,我知道......但是它有用)

由于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独立于下一个,事情似乎有效。

我是否应该在任何方法之后改变控件的顺序 - 比如Show()?或者这是一个错误?还是其他一些解释?

0 个答案:

没有答案