服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C# - C#实现代码移除窗体上的控件

C#实现代码移除窗体上的控件

2023-03-02 15:10weixin_45684821 C#

这篇文章主要介绍了C#实现代码移除窗体上的控件问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

C#代码移除窗体上的控件

以PictureBox为例

需要根据程序运行状况移除窗体中不需要的PictureBox时,通常的操作是,遍历窗体的控件,删除目标PictureBox控件,然而,直接操作的结果是,无法一键删除全部目标PictureBox控件,

如:

?
1
2
3
4
5
foreach( Control ctr in Controls ) {
                if( ctr is PictureBox ) {
                    this.Controls.Remove( list[ ctr ] );;
                }
            }

运行结果:

C#实现代码移除窗体上的控件

原因分析

在程序运行过程中,点击Generate按钮,界面生成4个PictureBox控件,加上原来的5个控件,此时窗体中共有9个控件。

Reset按钮的功能是移除PictureBox控件,第一次点击时,遍历每一个控件,第一次进去foreach循环,

第6次循环,if判断为true,删除第一个控件,此时窗体还有8个控件;

第7次循环,if判断为true,删除第二个控件,此时窗体还有7个控件;

跳出foreach,再次点击Reset,流程以此类推。

因此在每次移除控件的过程中,foreach循环的上限不断减少,导致循环提前结束。

解决办法

循环过程中控制foreach的循环总数不变。

方案一

?
1
2
3
4
5
6
7
8
9
10
11
12
// remove all picturebox in form
            List<Control> list = new List<Control>();
            foreach( Control ctr in Controls ) {
                if( ctr is PictureBox ) {
                    list.Add( ctr );
                }
            }
            for( int i = 0; i < list .Count ; i++ ) {
                if( list[i] is PictureBox  ) {
                    this.Controls.Remove( list[ i ] );
                }
            }

方案二

?
1
2
3
4
5
6
7
8
9
10
// remove all picturebox in form
List<Control> list = new List<Control>();
foreach( Control ctr in Controls ) {
    if( ctr is PictureBox ) {
        list.Add( ctr );
    }
}
foreach( Control ctr in list ) {
    this.Controls.Remove( ctr );
}

运行结果:

C#实现代码移除窗体上的控件

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持服务器之家。

原文链接:https://blog.csdn.net/weixin_45684821/article/details/102518999

延伸 · 阅读

精彩推荐
  • C#C# WinForm实现窗体上控件自由拖动功能示例

    C# WinForm实现窗体上控件自由拖动功能示例

    这篇文章主要介绍了C# WinForm实现窗体上控件自由拖动功能,涉及WinForm控件属性及事件响应相关操作技巧,需要的朋友可以参考下...

    a7719485244892022-01-12
  • C#C# 开发step步骤条控件详解

    C# 开发step步骤条控件详解

    本篇文章主要介绍了用C#来实现一个step控件的方法步骤,具有很好的参考价值。下面跟着小编一起来看下吧...

    JackWang-CUMT7912021-12-28
  • C#C# 使用Winform 获取下拉框 选中的值

    C# 使用Winform 获取下拉框 选中的值

    这篇文章主要介绍了C# 使用Winform 获取下拉框 选中的值,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    enych8422022-10-27
  • C#C#正则表达式匹配与替换字符串功能示例

    C#正则表达式匹配与替换字符串功能示例

    这篇文章主要介绍了C#正则表达式匹配与替换字符串功能,结合具体实例形式分析了C#字符串正则替换相关类、方法的使用技巧与相关注意事项,需要的朋友可...

    流失的痕迹11422022-01-06
  • C#C# 遍历datatable字段名和value的案例

    C# 遍历datatable字段名和value的案例

    这篇文章主要介绍了C# 遍历datatable字段名和value的案例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    翘着二郎腿的程序猿4912022-10-28
  • C#C#编程自学之数据类型和变量一

    C#编程自学之数据类型和变量一

    本节课我们将学习C#编程语言的数据类型,数据类型可以分为值类型和引用类型,接着介绍变量的使用方法和作用域等内容,为了方便大家理解,我们还会...

    C#教程网12382021-10-29
  • C#C# WPF实现的语音播放自定义控件

    C# WPF实现的语音播放自定义控件

    这篇文章主要介绍了C# WPF实现的语音播放自定义控件,帮助大家更好的理解和学习使用c# WPF技术,感兴趣的朋友可以了解下...

    ARM8307922022-11-10
  • C#C#多线程之线程同步WaitHandle

    C#多线程之线程同步WaitHandle

    这篇文章介绍了C#多线程之线程同步WaitHandle的用法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参...

    .NET开发菜鸟6972023-02-22