我有一个带有自定义控件的应用程序。 OnLoad() 事件处理程序将一个项目添加到控件拥有的列表中。如果我停止调试并重新启动,该列表将包含上次执行时拥有的项目。
Public Class Display
Inherits System.Windows.Forms.UserControl
Public Objects As New List(Of Object)
Protected Overrides Sub OnLoad(e As EventArgs)
MyBase.OnLoad(e)
Objects.Add(New Rectangle(0, 0, 10, 10))
End Sub
End Class
在这种情况下,当我调试应用程序并在 Objects.Add() 行上放置断点时,对象列表上的监视显示它已经具有来自先前调试会话的多个对象;每次后续执行时,列表都会变大。这也不是图形故障,后面在对象上循环的代码确实会在列表中的所有对象上循环,包括来自先前调试会话的对象。这似乎是一个非常根本的错误。这是正确的吗?
Visual Studio 社区 2022 版本 17.8.5
确保对象列表未在代码中的任何位置声明为共享或静态您可以尝试在添加新项目之前在 OnLoad 事件中显式清除列表。这可确保每次加载控件时都会重置列表。
Public Shared Objects As New List(Of Object)
Protected Overrides Sub OnLoad(e As EventArgs)
MyBase.OnLoad(e)
Objects.Clear() ' Clears the list before adding a new object
Objects.Add(New Rectangle(0, 0, 10, 10))
End