欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C#實(shí)現(xiàn)代碼移除窗體上的控件

 更新時(shí)間:2023年01月25日 15:12:37   作者:weixin_45684821  
這篇文章主要介紹了C#實(shí)現(xiàn)代碼移除窗體上的控件問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

C#代碼移除窗體上的控件

以PictureBox為例

需要根據(jù)程序運(yùn)行狀況移除窗體中不需要的PictureBox時(shí),通常的操作是,遍歷窗體的控件,刪除目標(biāo)PictureBox控件,然而,直接操作的結(jié)果是,無(wú)法一鍵刪除全部目標(biāo)PictureBox控件,

如:

foreach( Control ctr in Controls ) {
				if( ctr is PictureBox ) {
					this.Controls.Remove( list[ ctr ] );;
				}
			}

運(yùn)行結(jié)果:

原因分析

在程序運(yùn)行過(guò)程中,點(diǎn)擊Generate按鈕,界面生成4個(gè)PictureBox控件,加上原來(lái)的5個(gè)控件,此時(shí)窗體中共有9個(gè)控件。

Reset按鈕的功能是移除PictureBox控件,第一次點(diǎn)擊時(shí),遍歷每一個(gè)控件,第一次進(jìn)去foreach循環(huán),

第6次循環(huán),if判斷為true,刪除第一個(gè)控件,此時(shí)窗體還有8個(gè)控件;

第7次循環(huán),if判斷為true,刪除第二個(gè)控件,此時(shí)窗體還有7個(gè)控件;

跳出foreach,再次點(diǎn)擊Reset,流程以此類推。

因此在每次移除控件的過(guò)程中,foreach循環(huán)的上限不斷減少,導(dǎo)致循環(huán)提前結(jié)束。

解決辦法

循環(huán)過(guò)程中控制foreach的循環(huán)總數(shù)不變。

方案一

// 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 ] );
				}
			}

方案二

 			// 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 );
			}

運(yùn)行結(jié)果:

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論