C_Sharp 板


LINE

※ 引述《kevin8685 (最愛maki~!)》之銘言: : 以下是我修改過後的 : 刪除按鈕 : 目前有個問題 : 執行後 可以成功進行第一次刪除 : 但是第二次就會卡住.. : 重開程式後 還是一樣 : 第一次成功 第二次卡住 : private void button1_Click(object sender, EventArgs e) : { : dt.Clear(); : ListBox.SelectedIndexCollection sic = : this.listBox1.SelectedIndices; : StreamReader item = new StreamReader("product.txt", : Encoding.UTF8); : while (!item.EndOfStream) : { : string[] item2 = item.ReadLine().Split(' '); : dr = dt.NewRow(); : dr["Key"] = item2[0]; : dr["Value"] = item2[1] + " " + item2[2]; : dt.Rows.Add(dr["Value"], dr["Key"]); : } : item.Close(); : int count = listBox1.SelectedItems.Count; : if (count > 1) : { : if (sic.Count == 0) : { : MessageBox.Show("您沒有選取任何項目。"); : } : else : { : for (int i = 0; i < sic.Count; i++) : { : list.Add(sic[i]); : } : list.Sort(); : for (int j = 0; j < sic.Count; j++) : { : int a = list[list.Count - (j + 1)]; : dt.Rows.Remove(dt.Rows[a]); : MessageBox.Show(a.ToString()); : } : } : } : StreamWriter sw = new StreamWriter("product.txt"); : for (int i = 0; i < dt.Rows.Count; i++) : { : sw.WriteLine(dt.Rows[i]["Key"].ToString() + " " + : dt.Rows[i]["Value"].ToString()); : } : sw.Close(); : BindingSource bs = new BindingSource(); : bs.DataSource = dt; : listBox1.DataSource = bs; : listBox1.DisplayMember = "Value"; : listBox1.ValueMember = "Key"; : dt.AcceptChanges(); : } : 之所以把listBox1的項目存在記事本~是想要把它當成資料庫用? 可以在關閉程式後儲存? 個人認為在Form_Load階段把listBox1的項目讀進來就好了 不需要在按下刪除按鈕時又把記事本的內容讀進來 另外SelectedIndices和SelectedItems就這邊的需要來說~用其中一個就好了 以下是我改過可以跑的程式: if (sic.Count == 0) { MessageBox.Show("您沒有選取任何項目"); } else { //原本我也以為底下這個把選取項目指標存起來的動作是多餘的 //實作後才知道似乎是有這個必要 for (int i = 0; i < sic.Count; i++) { list.Add(sic[i]); } BindingSource bs1 = listBox1.DataSource as BindingSource; for (int j = sic.Count - 1; j >= 0; j--) { bs1.RemoveAt(list[j]); //假設在listBox1選取多項 //在移除項目之後,原本紀錄多項的sic會跟著變動,但不規則 //我觀察到的現象是選3個,移除1個後,卻只剩下1個...囧 //所以只好用list先把選到的指標存起來,在移除時取用 //原po似乎也觀察到不能從前面開始移除,否則移除1個過後 //剩下的指標就不正確了,所以要從後面開始移除 } //原po忘了清除這個全域變數list,下次再刪除就... //實際上我認為list的生命週期應該只活在這個事件 //不應該弄成全域變數,稍不注意就會造成未預期的結果 list.Clear(); } StreamWriter sw = new StreamWriter("product.txt"); DictionaryEntry a; for (int i = 0; i < listBox1.Items.Count; i++) { a = (DictionaryEntry)listBox1.Items[i]; sw.WriteLine(a.Key.ToString() + " " + a.Value.ToString()); } sw.Close(); 另外...要不是原po有寄程式碼給我 我想可能又會再上來問為什麼全部刪除再加入一個項目後就不能用了... 原因在於"加入"這個事件裡~寫入記事本那段~一開頭就給它Environment.Newline 那程式下次再執行~一開頭就跑到那段~自然就掛點了 這個的解法~個人會傾向於在寫入時就寫入正確的資料 而不會讓它寫入空白後~再寫一堆程式去防... By the way...其實這些東西~Trace一下就看得出來死在哪了... --



※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 163.15.180.2 ※ 編輯: andymai 來自: 163.15.180.2 (06/15 19:36)
1F:推 kevin8685:感謝A大!! 昨天還給我了不少幫助^^ 我會在努力XD 06/16 00:08







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:Boy-Girl站內搜尋

TOP