kk_lee69 发表于 2012-2-23 23:19:53

listview 選定項目問題...防呆措施...求防呆思路

本帖最后由 kk_lee69 于 2012-2-23 23:53 编辑

我做了一個 兩個 LISTVIE 的畫面如下圖......但是問題來了......有幾個防呆問題我無法解決......



當你選定了 左手邊的 某個項目......... 這時候 使用者 突然後按了 右手邊的 LISTVIEW 畫面後.........整個畫面會變成........



也就是說 使用者可能會以為......右手邊的畫面 並沒有被選擇......但是 這時候 他按下 加入................程式也可以把剛剛選定的加入進去.................如下圖



另外一種情況是 如下圖.....使者者....本來選了一個 後來不想要了....於是在紅色圈圈的地方按一下.....整個畫面就會變成 下面的圖案......這時候 加入 一樣有作用



能夠解決這個防呆問題嗎??我的目的是 要把系統鎖的更嚴格...... 也就是說使用者 不是 選了 左手邊的畫面 馬上案加入.....我就打算讓 他重新選擇.....能做到嗎??

代碼很長.....所以我挑重點 秀出來.....其實我寫的很基本而已....所以才在想是不是有更好的防呆方式......

$listview1 = GUICtrlCreateListView("編號 (清單)|客戶簡稱(清單) ", 200, 70, 250, 250,$lvs_report)
$listview2 = GUICtrlCreateListView("編號 (顯示)|客戶簡稱 (在報表顯示)", 540, 70, 250, 250,$lvs_report)


加入的 語法


                Case $add1
                        GuiSetState(@SW_DISABLE,$WinMain) ; 禁用視窗,以防用戶作出其他更改

                       
                        $ItemList = _GUICtrlListView_GetSelectedIndices($ListView1,True)
                        _ArrayDisplay($ItemList)
                        ;MsgBox(0,"",_GUICtrlListView_GetSelectedIndices($ListView1))
                        ;Exit
                       
                        ;$ChID=StringLeft(GUICtrlRead(GUICtrlRead($ListView1)),StringInStr(GUICtrlRead(GUICtrlRead($ListView1)),"|")-1)

                        IF $ItemList=0 Then
                                MsgBox(0,"操作錯誤","請於左邊通報清單中選擇要加入的紀錄",2)
                                $Check1="1"
                        EndIf
                       
                        If $Check1="0" Then
                                        FOR $i=1 TO $ItemList Step 1
                                                $LISTA=_GUICtrlListView_GetItemTextString($ListView1,$ItemList[$i])
                                               
                                                If StringInStr($ProdSTR,StringLeft($LISTA,StringInStr($LISTA,"|",0,1)-1),0,1)=0 Then
                                                        $ProdSTR = $ProdSTR&":"&StringLeft($LISTA,StringInStr($LISTA,"|",0,1)-1)
                                                        ;MsgBox(0,"",$ProdSTR)
                                                        GUICtrlCreateListViewItem($LISTA, $listview2)
                                                        _GUICtrlListView_DeleteItem($ListView1,$ItemList[$i])
                                                Else
                                                        MsgBox(0,"錯誤","產品已經在報表清單中",1)
                                                EndIf
                                        Next
                               
                               
                                ;MsgBox(0,"A",GUICtrlRead(GUICtrlRead($ListView5)))
                                ;GUICtrlCreateListViewItem(GUICtrlRead(GUICtrlRead($ListView1)), $listview2)
                                ;_GUICtrlListView_DeleteItemsSelected(GUICtrlGetHandle($listview1))
                                ;$CustSTR=$CustSTR&"CustID='"&$ChID&"' or "
                                ;MsgBox(0,"A",$CustSTR)
                        EndIf

                        $Check1 = "0"

                        WinActivate($WinMain,"")
                        GuiSetState(@SW_ENABLE,$WinMain) ; 使窗口重新可用

afan 发表于 2012-2-23 23:37:04

谁知道你是怎么加入的

kk_lee69 发表于 2012-2-23 23:54:28

回复 2# afan


    代碼很長.....所以我挑重點 秀出來.....其實我寫的很基本而已....所以才在想是不是有更好的防呆方式......

$listview1 = GUICtrlCreateListView("編號 (清單)|客戶簡稱(清單) ", 200, 70, 250, 250,$lvs_report)
$listview2 = GUICtrlCreateListView("編號 (顯示)|客戶簡稱 (在報表顯示)", 540, 70, 250, 250,$lvs_report)


加入的 語法


                Case $add1
                        GuiSetState(@SW_DISABLE,$WinMain) ; 禁用視窗,以防用戶作出其他更改

                       
                        $ItemList = _GUICtrlListView_GetSelectedIndices($ListView1,True)
                        _ArrayDisplay($ItemList)
                        ;MsgBox(0,"",_GUICtrlListView_GetSelectedIndices($ListView1))
                        ;Exit
                       
                        ;$ChID=StringLeft(GUICtrlRead(GUICtrlRead($ListView1)),StringInStr(GUICtrlRead(GUICtrlRead($ListView1)),"|")-1)

                        IF $ItemList=0 Then
                                MsgBox(0,"操作錯誤","請於左邊通報清單中選擇要加入的紀錄",2)
                                $Check1="1"
                        EndIf
                       
                        If $Check1="0" Then
                                        FOR $i=1 TO $ItemList Step 1
                                                $LISTA=_GUICtrlListView_GetItemTextString($ListView1,$ItemList[$i])
                                               
                                                If StringInStr($ProdSTR,StringLeft($LISTA,StringInStr($LISTA,"|",0,1)-1),0,1)=0 Then
                                                        $ProdSTR = $ProdSTR&":"&StringLeft($LISTA,StringInStr($LISTA,"|",0,1)-1)
                                                        ;MsgBox(0,"",$ProdSTR)
                                                        GUICtrlCreateListViewItem($LISTA, $listview2)
                                                        _GUICtrlListView_DeleteItem($ListView1,$ItemList[$i])
                                                Else
                                                        MsgBox(0,"錯誤","產品已經在報表清單中",1)
                                                EndIf
                                        Next
                               
                               
                                ;MsgBox(0,"A",GUICtrlRead(GUICtrlRead($ListView5)))
                                ;GUICtrlCreateListViewItem(GUICtrlRead(GUICtrlRead($ListView1)), $listview2)
                                ;_GUICtrlListView_DeleteItemsSelected(GUICtrlGetHandle($listview1))
                                ;$CustSTR=$CustSTR&"CustID='"&$ChID&"' or "
                                ;MsgBox(0,"A",$CustSTR)
                        EndIf

                        $Check1 = "0"

                        WinActivate($WinMain,"")
                        GuiSetState(@SW_ENABLE,$WinMain) ; 使窗口重新可用

afan 发表于 2012-2-24 00:08:17

_GUICtrlListView_CopyItems()

afan 发表于 2012-2-24 00:16:00

另外,第二个图问题源于你的样式缺少 $LVS_SHOWSELALWAYSGUICtrlCreateListView("編號 (清單)|客戶簡稱(清單) ", 200, 70, 250, 250, $LVS_REPORT + $LVS_SHOWSELALWAYS)

netegg 发表于 2012-2-24 01:12:45

afan居然看明白lz问什么了,佩服

bdancerlc 发表于 2012-2-24 01:18:37

确实 有这个问题,没有深入研究,等答案..学习..

afan 发表于 2012-2-24 01:29:39

afan居然看明白lz问什么了,佩服
netegg 发表于 2012-2-24 01:12 http://www.autoitx.com/images/common/back.gif


    “這時候 使用者 突然後按了 右手邊的 LISTVIEW 畫面後” 这句话看得我眼前瞬间有了 迅雷不及掩耳盗铃 的画面

kk_lee69 发表于 2012-2-24 01:46:47

回复 8# afan
    {:face (356):} 表達的不好請多見諒.....順便在請問一下.....有人 LISTVIEW可以做到 兩個 不同的 LISTVIEW使用拖曳的方式 移動到 另外一個表嗎??

netegg 发表于 2012-2-24 06:21:09

回复 9# kk_lee69
列表互换还是仅数据转移

yyy910 发表于 2012-2-24 17:52:17

都是繁体字哦。

kk_lee69 发表于 2012-2-24 22:28:25

回复 10# netegg
都可以 我的用意 很簡單.....讓使用者方便操作....鈀資料從左邊的LISTVIEW 移動到 右邊的.....

等使用者 選擇完畢後......必須要按下 更新 或者其他按鈕......在去讀取 右手邊的LISTVIEW 資料 回寫到資料庫裡面

netegg 发表于 2012-2-24 22:43:04

$item = _guictrllistview_getselect($listleft)
$num = _guictrllistview_getitemcount($listright)
$aItem = _guictrllistview_getitemTextArray($listleft, $item)
_guictrllistview_additem($listright, $aItem, $num+1)
_guictrllistview_addsubitem($listright, $num+1, $aItem,1)
....

kk_lee69 发表于 2012-2-24 22:47:32

回复 13# netegg

了解 感謝 回覆 我研究看看
页: [1]
查看完整版本: listview 選定項目問題...防呆措施...求防呆思路