我有一个表单(Form1),它有30个控件.当我按下一个按钮时,我想删除这30个按钮并在表单上放置其他控件.现在,我的问题是这会变慢.
我有这个列表,其中包含我要删除的控件,并使用For Each运行它们.
Private Sub ClearControls()
'removing the controls from Me.Controls
For Each Control As Control In ListToDelete
Me.Controls.Remove(Control)
Next
ListToDelete = New List(Of Control)
End Sub
Run Code Online (Sandbox Code Playgroud)
现在,如果您观看表单,您会看到控件被1删除1.此操作大约需要0.4秒(使用内置秒表计时)并且时间太长.
是否有任何解决方案可以更快地删除控件,或者只能逐个删除控件?
也许一个重要的事实是一切都与数据库相关联.控件由我自己定义的类(TableDrawer)创建,它创建一个矩形或圆形(取决于数据库中的信息).我将自制控件添加到表单中,当我想删除它们时,需要0.4秒才能在表单上获取其他控件 - 同时使用我的数据库中的信息.
希望这可以解决一些问题,我希望你能帮助我...它真的要快一点(我希望得到0.1秒或更低)
首先隐藏Panel似乎使控件消失得比仅清除Panel快.看到这段代码:
Option Strict On
Public Class Form1
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
Panel1.Visible = False
If Not Panel1.Controls.OfType(Of Button).Any() Then
For x As Integer = 1 To 10
For y As Integer = 1 To 10
Dim btn As New Button()
btn.Size = New Size(45, 45)
btn.Location = New Point((x - 1) * 45, (y - 1) * 45)
btn.Text = (x * y).ToString()
Panel1.Controls.Add(btn)
btn.Visible = True
Next
Next
End If
Panel1.Visible = True
End Sub
Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
Panel1.Visible = False
Panel1.Controls.Clear()
Panel1.Visible = True
End Sub
End Class
Run Code Online (Sandbox Code Playgroud)
此代码有2个按钮和一个Panel.Button1生成100个按钮,将它们放在Panel上.Button2在移除面板之前隐藏面板.也许你可以尝试这个想法.