我无法解释为什么 ControlCollection 中的项目会在 Show() 方法之后重新排序 - 也许这里有些人可能知道。我正在使用 .NET 2.0/VS2008 使用 VB.NET 编写一个较旧的应用程序(yuk,我知道......但它的工作)
没有已知的事件会因显示而触发(例如,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 next 并且一切似乎都有效。
我是否应该期望控件的顺序可以在任何方法之后改变——比如 Show()?或者这是一个错误?还是其他解释?