vb.net 如何使用代码删除窗体内全部控件?

sinat_36833178 2017-12-04 10:35:45
假设我窗体上有5个按钮控件,5个标签控件,想要全部删除他们。
我是使用了for each循环语句:
Dim con As Control
For Each con In Me.Controls
Controls.Remove(con)
Next
但在实际执行的时候,会产生只删除部分控件的结果,且控件总数是奇数或偶数对删除控件的结果也有影响,小白不懂,求大神帮忙啊
...全文
835 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
exception92 2017-12-04
  • 打赏
  • 举报
回复
引用 2 楼 sinat_36833178 的回复:
[quote=引用 1 楼 duanzi_peng 的回复:] Controls.Remove(con) -》Controls.Clear();
大神那您能讲讲Remove的用法为什么不行吗?谢谢啦[/quote] 那就不清楚了,清空当然是clear,没必要一个一个remove。
sinat_36833178 2017-12-04
  • 打赏
  • 举报
回复
引用 1 楼 duanzi_peng 的回复:
Controls.Remove(con) -》Controls.Clear();
大神那您能讲讲Remove的用法为什么不行吗?谢谢啦
exception92 2017-12-04
  • 打赏
  • 举报
回复
Controls.Remove(con) -》Controls.Clear();
FainSheeg 2017-12-04
  • 打赏
  • 举报
回复
哦,VB里应该是step -1,递减循环
FainSheeg 2017-12-04
  • 打赏
  • 举报
回复 1
以前用for each循环遇到过类似的问题,for each循环应该是按照控件的index来遍历所有控件,而删除一个控件会导致后面所有控件的index值前移1,所以会漏。例如当循环到index=5时你删除了,那原本index为6的控件会前移到5,而下一个循环index=6,所以这个控件就被你漏了。所以当涉及到删除时,for each循环不好用,如果要用for循环来删除必须用i--从尾到头循环。
在码农的生活中,很多级码农都有这样的经历,会被一个小小的技术问题拦住,然后进度跟不上了,被老板XXXX一大通了。心情不爽了。 好吧,这个曾经是我遇到拦路虎之一。但事实上不是什么大技术。技术就是一层纸,破了就破了。 这是一个关于如何跨窗体操作控件或过程的一个例子。比如,你想用窗体A的按键来执行窗体B的文本框变色。 Imports System Imports System.Threading Imports System.Text Public Class Form1 Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load CheckForIllegalCrossThreadCalls = False '不写这行,会出错,不允许线程的数据写到TextBox1.Text 中去。 Form2.Show() End Sub Private Sub form1_FormClosing(sender As Object, e As EventArgs) Handles Me.FormClosing ' If runThread.IsAlive = True Then runThread.Abort() End Sub Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click '用的是委托方式 Me.Invoke(New MethodInvoker(AddressOf THREAD2)) End Sub Private Sub THREAD2() Static j As Integer j = j + 1 TextBox1.Text = " 这是 [线程] 操作" & vbCrLf & _ " Button2被点了: " & j & " 次" & vbCrLf & "要求是from2.textbox.text= textbox1.text 。[问题]但为什么不能成功显示呢?" End Sub Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged Form2.TextBox1.Text = TextBox1.Text End Sub Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click Static j As Integer j = j + 1 TextBox1.Text = " 这是 [非线程] 操作" & vbCrLf & _ "Button3 点击了: " & j & " 次" & vbCrLf & _ "要求是from2.textbox.text= textbox1.text, 可以成功显示,这个是对的。" End Sub End Class

16,552

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧