關於SelectedItems的問題

2021-04-21 21:00:29 字數 1192 閱讀 7773

在做俄羅斯方塊的時候寫了下面一段**:

private void listview1_selectedindexchanged(object sender, eventargs e)

this.label1.invalidate();}

就是在右邊的listview中選中一行,就在左邊還原為磚塊圖案。但是當我第一次選擇一行時沒有什麼問題,當我第二次選擇一行時就出現下面的錯誤:

未處理argumentoutofrangeexception

invalidargument=「0」的值對於「index」無效。

引數名: index

上網查詢說是要加一句判斷

if(listview1.selecteditems.count > 0)

但是我不知道為什麼要加這句判斷。於是決定自己去尋找答案..........

經過多次測試,發現乙個「秘密」。我新建了乙個工程,窗體中只放了乙個listview,然後在selectedindexchanged事件中只加了一句**:

private void listview1_selectedindexchanged(object sender, eventargs e)

目的是想看一下c=this.listview1.selecteditems.count的變化情況,第一次選擇一行的時候,c=1,第二次選擇一行的時候,執行了兩遍selectedindexchanged事件,第一遍c=0,第二遍c=1,錯誤的根源就在第一遍執行selectedindexchanged事件的過程中。

然後我又選擇多行進行測試,比如3行,那麼selectedindexchanged事件就執行了4遍,第一遍c=0,第二遍c=1,第三遍c=2,第四遍c=3。

從上面的測試我得出了以下結論:

當第二次選擇一行的時候,他是先把前一次選中的那一行取消,取消之後選中的行數c=this.listview1.selecteditems.count就變為了0(這時selecteditems中沒有內容,而去引用它,當然會出錯),然後再去選中我們要選中的行,此時c=this.listview1.selecteditems.count又變為了1,即選中了一行。選擇多行的時候也是類似的,乙個看似很簡單的過程事實是分多步進行的。這就是錯誤的根源所在,所以我們在引用selecteditems的時候要先做乙個判斷,看selecteditems.count是否大於0。

任何錯誤都是有它的原因的,只要我們堅持就一定能夠找到錯誤的根源。

關於程式關於世界

首先,在學了1年多的軟體設計的基礎上,問下自己 程式是什麼?業務需求是什麼?程式有什麼用?什麼是演算法?什麼是資料庫?或許每個人的理解不同,會給出不同的答案。那麼自己的理解 程式是乙個讓計算機工作的流程,在程式寫好之後,計算機就會按照,程式設計師定義好流程在執行。其實很多時候,乙個程式的好壞,在於乙...

關於血液關於軟體

1 自然沉降法 將血袋垂直吊掛於4 2 冰箱內,使紅細胞自然下沉1 3d,或將血袋呈70 80 角立於冰箱,需用時,用一次性分漿器分出血漿,制得濃縮紅細胞。2 洗滌法 一般用生理鹽水反覆洗滌3 6次。經洗滌的紅細胞,除白細胞和血小板減少外,血漿蛋白也極少,紅細胞中殘存的血漿蛋白含量約為原總蛋白的1 ...

關於冷漠,關於愛情

我不知道為什麼今天又莫名其妙開始思考愛情這件事,隨之就解決了我一直無法面對冷漠這件事 被冷漠是我始終無法消化的一件事,每當遇見冷漠時,我總會覺得就像一團火把自己燒得面目全非,但對方卻毫無傷害。但我突然懂了,遇到冷漠時,體面的離開即可 在乎你的人一定會在你離開後,找到你跟你解釋為什麼 連解釋都來不及,...