VB.NET动态创建按钮点击后如何销毁自身及关联动态控件
动态生成按钮点击删除自身及同批次控件实现方案
事件处理方法的sender参数就是触发当前点击事件的控件实例,直接类型转换即可获取对应按钮,再结合创建控件时的命名规则提取批次序号,就能定位同批次的其他控件完成删除。
核心实现代码
1. 点击事件中获取触发按钮
Friend Sub DeleteProductButton(sender As Object, e As EventArgs) ' 强转sender得到当前被点击的按钮 Dim currentBtn As Button = DirectCast(sender, Button) ' 从按钮名称中提取创建时传入的批次序号i Dim rowIndex As Integer = Integer.Parse(currentBtn.Name.Replace("btnRemoveProduct", ""))
2. 删除按钮自身
删除前记得先移除事件绑定,避免内存泄漏:
' 移除事件绑定 RemoveHandler currentBtn.Click, AddressOf DeleteProductButton ' 从窗体控件集合、自定义存储列表中移除 Me.Controls.Remove(currentBtn) UserButtons.Remove(currentBtn) ' 销毁控件释放资源 currentBtn.Dispose()
3. 删除同批次其他动态控件
同批次创建的文本框只要和按钮使用同一序号规则命名(比如txtProductName{i}、txtProductStock{i}),直接按名称查找即可定位:
' 替换成你实际的文本框命名前缀 Dim nameTbx As Control = Me.Controls($"txtProductName{rowIndex}") Dim stockTbx As Control = Me.Controls($"txtProductStock{rowIndex}") ' 找到对应控件后执行删除 If nameTbx IsNot Nothing Then Me.Controls.Remove(nameTbx) ' 如果你有维护文本框的存储列表,同步从列表移除对应项 nameTbx.Dispose() End If If stockTbx IsNot Nothing Then Me.Controls.Remove(stockTbx) stockTbx.Dispose() End If End Sub
可选优化
删除当前行控件后,如果需要保持剩余控件的排列整齐,可以遍历所有序号大于
rowIndex的动态控件,重新计算Location坐标、更新控件名称中的序号,避免后续新增控件时出现序号、位置冲突。
内容的提问来源于stack exchange,提问作者Amtyi
相关产品推荐
相关产品推荐

