我現在正在作一個WPF的專案,是用vb做的,現在出現了一個問題請各位大神們幫忙解決.
問題如下首先畫面左邊是一列占了畫面3分之一寬的listbox,顯示的一系列商品種類,然后右側根據選擇的商品種類,顯示出不同的商品,點擊商品會在商品的由上方出現一個顯示數量的圓圈。
以上是畫面的基本內容現在出現了一個問題,就是當我切換listboxitem的時候商品會重新加載,導致商品數量也從0開始,比如我選擇了一類商品中的一個,商品右上方出現數量,這時候我切換到第二類商品后,再切換回第一類商品,第一類商品中我曾經選中的商品的數量還需要重新選擇,右上角的圓圈會不見了,也就是重新加載,所以請問有什么辦法能讓切換商品種類后,剛才選擇的商品數量也就是右上角的圓圈還是上一次選擇的樣子嗎.
感謝各位的幫助
uj5u.com熱心網友回復:
畫幾張圖片“展示一下”你需要的效果吧。
uj5u.com熱心網友回復:
我手機發的帖子簡單來說就是listbox變換后,每一次相當于重新加載了顯示的資料,有什么方法可以不用每次重新加載,比如放在快取中,只是不知道對不對該如何放uj5u.com熱心網友回復:
用一個HashTable記錄已選擇的全部(不分商品種類)商品;
選中商品就加入HashTable,取消選中從HashTable中洗掉;
每次點擊商品種類重繪商品串列時,對每個商品,檢查是否存在HashTable中,如果存在就自動標記為選中。
uj5u.com熱心網友回復:
List(你的“右邊”那個)內的內容,在每次“變換后”肯定是需要重新加載的!并且它也沒有什么“快取”機制,如果要達到這種效果,必須是自己處理。
象你這種應用,這個“快取”其實就是一種“資料結構”而已。
但使用“快取”,必須要“保證一定時期內資訊不變”,否則不適合。
比如你這個:在這個“操作視窗關閉之前”,每個商品類對應的商品串列不變,可以用如下結構快取:
Private Type RecCache
GoodsName() As String ' 商品名串列
GoodsSelect() As Boolean ' 選擇狀態
GoodsType As Long ' 類別標識
GoodsItem As Long ' 商品數量
GoodsSelNum As Long ' 選擇項總數
End Type
按你在主貼中的描述,你“右邊”那個ListBox應該是“多選”串列吧!
因此用一個陣列GoodsSelect()來記錄每一個串列項的選擇狀態(“選定”或“未選定”),
而GoodsSelNum就直接記錄“被選擇的有多少項”了,
因為你要進行數量提示,在“操作程序中”選擇項有改變時,這個數量是“實時變化”的,
因此用一個引數直接記錄下來,用不著在每次從“快取”中加載串列、設定狀態后,
還要去“統計”一下選擇了多少項。
如果用“動態陣列”來記錄快取,GoodsType則是標識這個“快取記錄”是屬于“哪個商品類”的,
記錄下左邊的“商品類序號”就行了,序號對應“左邊串列的順序”,從1開始標識。
當然如果“商品類”不是很多,則可以用一個“固定大小的動態陣列”來做“快取記錄表”;
如果商品類的數量是確定的,直接用“固定陣列”來宣告“快取記錄表”也可以;
如果商品類“最多有xxx個”,同樣可以直接宣告一個固定陣列,幾百、幾千的都無所謂。
因為現在的計算機記憶體都是以“GB”計,1萬個的“快取表”,初始記憶體占用不到200KB。
用“固定快取表”(固定陣列,或一開始就按商品類總數申請的一個足夠大的“動態陣列”),
就不用去“查有沒有此類的快取”,因為左邊商品類的“串列索引”值直接跟快取表的元素下標對應,
這時“GoodsType”這個成員則用來標識“此商品有沒有被快取”。
如果某類商品“有快取”,從快取表的對應記錄中加載商品串列、設定“選擇狀態”等;
否則,去查詢該類有哪些商品,把它顯示到“右邊”的串列中時,也把它記錄到“快取表”對應項的GoodsName()中。
………………
先說到這兒吧,自己去體會一下…………
uj5u.com熱心網友回復:
ListBox 有一個屬性叫做 ItemData,它為每一個串列項儲存一個 Long 型的值,預設是 0。你可以在選定某一個串列項并輸入數量后,將你的“數量”值保存在相應的 ItemData 中:
List1.ItemData(List1.ListIndex) = Text1
你只要的 List1 的 Click 事件中加上
Text1 = List1.ItemData(List1.ListIndex)
當選中已經設定了數量的串列項時,就顯示出原來保存的數量;否則顯示 0。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/65431.html
標籤:控件
