close
該死的ListBox...
讓我禮拜五加班了一小時=血= (雖然是自己想加的...)
動態新增明明就很簡單
為啥動態刪除就這麼難= =

但...其實也沒有很難,我自己寫了好幾個版本
有4行的、5行的,最後連巢狀迴圈都出現了!
(殺小啊...為啥那麼單純的東西我要小到巢狀迴圈,要是被前輩看到一定會被笑死= =)

重點是...全部都不能work= =
不是出現奇怪的錯誤,就是會一直少刪一項。
因為我一直都用ListBox.Items[m].Text來判斷,以為m會存所以目前選的所有index
雖然確實是存了沒錯,但因為每刪掉一個,index就會變一次。
所以跟本不能用迴圈來刪。

但即使如此,網路上還是常出現這種錯誤的寫法

for (int m = 0; m < ListBox.SelectedItem.Count; m++)
{
ListBox.Items.Remove(ListBox.SelectedItem[m]);
}

果然...網路上不見得都是對的
這種寫法就是怎麼刪都會少刪一項,因為index每次都會變

比較扯的是...網路上還常出現這種寫法

while (listBox.SelectedItems.Count > 0)
{
listBox.Items.Remove(listBox.SelectedItems[0]);
}

看到這個的時候真的是超高興的...
很好啊...一語點醒夢中人,我只要每次刪一個就好了! 怎麼一直都沒想到呢XD
但我把這段copy到程式碼裡 然後按build 居然出現了compiler error!!!

不...我並不是忘了改變數名稱= =
是根本沒SelectedItems這東西!!!!

怪了,回去不斷了反覆看了那段文章,是c#語法沒錯啊!!!
為啥會沒有SelectedItems這東西呢!!!
於是我去看了msdn,居然只有SelectedItem,而沒有SelectedItems!!
為什麼會少了一個s!!! 而且SelectedItem的回傳值還是listbox型態<囧>
到這我真的快瘋了...
微軟到底在幹麻...就算是改版,也改得太離譜了
用法變了,回傳型態也變了,但名字卻只差一個s!! 這叫習慣用SelectedItems情何以堪啊~~~~ <囧>

好吧雖然我跟SelectedItems不熟暫時沒這煩惱,但要是之後.net改版到4.0 4.5 5.0的時候怎麼辦啊!!
難道每改版一次我都要再重新習慣新的用法嗎!!
這一點微軟真是超不貼心...
JAVA就好多了,他從來就沒去改之前的語法,我好想JAVA啊~~~ 為什麼我沒進JAVA組啊~~~


嗯,回歸正題...
在那之後我只好硬著頭皮看MSDN
但老實說MSDN中文翻得好爛....我寧願看英文的= =
好顯最後有看懂SelectedItem的定義,然後又被listBox.SelectedItems[0]啟發到..
所以我寫下這一行...

while (ListBox.SelectedItem != null) ListBox.Items.Remove(ListBox.SelectedItem);


喔~~~ 真是太美妙了
最後他終於work了~~~ 終於把該刪的都刪乾淨了
而且還只有一行就解決了!! (灑花)

不過我加班一小時...居然就為了這一行Q口Q
真是有點不爽= =
算了剛學就是這樣,誰叫我之前就懶惰不玩.net 報應啊= =


但真的很佩服微軟...
asp.net(c#)、asp.net(vb)、winform(c#)三種語言,同一個問題,解決的方式和語法居然都不一樣!
不都是listbox嗎! 不一樣就不要用一樣名字讓人混淆啊!!
害我孤狗查到的solution都不適用 氣死人了。

還好是有解決了,不然真的會吐血
最後再判斷add是否重覆,就完成這小功能了

if (list.Selected == true && !ListBoxRight.Items.Contains(list))
{
ListBoxRight.Items.Add(list);
}

Contains也是看msdn才知道的
看來以後直接查msdn應該會比較快= =
為了這種問題加班真的很蠢...
後來快6點半時還一直被後面的系統組盯著看
是怎樣...沒看過這麼賣力的新人嗎= =

不過像這麼不貼心的東西
以後大概都很難準時下班了(大嘆)
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 SkyChord 的頭像
    SkyChord

    No fUtUrE

    SkyChord 發表在 痞客邦 留言(0) 人氣()