ListView - Problem

    • Offizieller Beitrag

    Hi,
    Ich habe eine GUI (Bestellung), dort wird mit dem Button "Bestellvorschlag" aus der Artikeldatei ermittelt welche Artikel unterhalb des Meldebestands (oder kurz davor) liegen und diese werden mit vorgeschlagener Bestellmenge in die ListView eingetragen.
    Die Liste hat den CheckboxStyle, damit der User die Artikel, die nicht bestellt werden sollen abwählen kann.

    Nun mein Problem:
    Ich möchte eigentlich, dass der User die vorgeschlagene Bestellmenge in der ListView korrigieren kann.
    Aufgrund des Checkboxstyles scheint da aber kein Zugriff möglich. Hat irgendwer 'ne Idee wie ich da weiterkomme?

    GUI:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>

    [/autoit] [autoit][/autoit] [autoit]

    #Include <GuiListView.au3>
    $BestellGUI = GUICreate("Bestellung", 870, 554, 110, 128, BitOr($WS_CAPTION, $WS_POPUP, $WS_SYSMENU), $WS_EX_TOPMOST)
    $lvBestell = GUICtrlCreateListView("|Artikel-Nr|Bezeichnung|Lagerbestand|Mindestbestand|Bestellmenge", 4, 84, 861, 465, -1,$LVS_EX_CHECKBOXES)
    _GUICtrlListViewSetColumnWidth(-1,0,30)
    _GUICtrlListViewSetColumnWidth(-1,1,120)
    _GUICtrlListViewSetColumnWidth(-1,2,100)
    _GUICtrlListViewSetColumnWidth(-1,3,90)
    _GUICtrlListViewSetColumnWidth(-1,4,90)
    _GUICtrlListViewSetColumnWidth(-1,5,90)
    $item1=GUICtrlCreateListViewItem("|0815|Muster1|3|5|4",$lvBestell)
    GUICtrlSetState(-1, $GUI_CHECKED)
    $item2=GUICtrlCreateListViewItem("|x2341|Muster2|24|15",$lvBestell)
    GUICtrlSetState(-1, $GUI_CHECKED)
    $item3=GUICtrlCreateListViewItem("|A-65 673|Muster3|11|10|5",$lvBestell)
    GUICtrlSetState(-1, $GUI_CHECKED)
    $bVorschlag = GUICtrlCreateButton("Bestell-Vorschlag", 36, 12, 130, 21, 0)
    $bClearList = GUICtrlCreateButton("Liste löschen", 206, 48, 130, 21, 0)
    $bPrintBestell = GUICtrlCreateButton("Bestellung drucken", 522, 12, 130, 21, 0)
    $bMailBestell = GUICtrlCreateButton("Bestellung mailen", 522, 48, 130, 21, 0)
    $bEscBestell = GUICtrlCreateButton("&Abbrechen", 782, 12, 69, 41, 0)
    $bAddArtikel = GUICtrlCreateButton("Artikel hinzufügen", 36, 48, 130, 21, 0)
    GUISetState(@SW_SHOW)

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $bEscBestell
    Exit
    ;;
    EndSwitch
    WEnd

    [/autoit]

    EDIT:
    So, das Problem konnte ich lösen :stolz_bin:
    dabei ist nur ein kleines, anderes Problem entstanden. Ich ändere den Wert in einer InputBox. Da mein Fenster aber $WS_EX_TOPMOST - Style hat, verschwindet die InputBox dahinter. Bei einer MsgBox kann ich den TOP-Style erzwingen - geht das auch irgendwie für die Inputbox?
    Wenn nicht, ist nicht sooo tragisch - bau ich mir halt eine eigene Inputbox mit $WS_EX_TOPMOST-Style.
    (Den $WS_EX_TOPMOST-Style der GUI aufzuheben für die Dauer des Erscheinens der InputBox macht keinen Sinn, da mehrere andere Fenster [alle mit $WS_EX_TOPMOST-Style] aktiv sein können).

    Hier meine Lösung:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    #Include <GuiListView.au3>
    $BestellGUI = GUICreate("Bestellung", 870, 554, 110, 128, BitOr($WS_CAPTION, $WS_POPUP, $WS_SYSMENU), $WS_EX_TOPMOST)
    $lvBestell = GUICtrlCreateListView("|Artikel-Nr|Bezeichnung|Lagerbestand|Mindestbestand|Bestellmenge", 4, 84, 861, 465, -1,$LVS_EX_CHECKBOXES)
    GUICtrlSendMsg($lvBestell, $LVM_SETEXTENDEDLISTVIEWSTYLE, $LVS_EX_GRIDLINES, $LVS_EX_GRIDLINES)
    GUICtrlSendMsg($lvBestell, $LVM_SETEXTENDEDLISTVIEWSTYLE, $LVS_EX_FULLROWSELECT, $LVS_EX_FULLROWSELECT)
    _GUICtrlListViewSetColumnWidth(-1,0,30)
    _GUICtrlListViewSetColumnWidth(-1,1,120)
    _GUICtrlListViewSetColumnWidth(-1,2,100)
    _GUICtrlListViewSetColumnWidth(-1,3,90)
    _GUICtrlListViewSetColumnWidth(-1,4,90)
    _GUICtrlListViewSetColumnWidth(-1,5,90)
    $item1=GUICtrlCreateListViewItem("|0815|Muster1|3|5|4",$lvBestell)
    GUICtrlSetState(-1, $GUI_CHECKED)
    $item2=GUICtrlCreateListViewItem("|x2341|Muster2|24|15",$lvBestell)
    GUICtrlSetState(-1, $GUI_CHECKED)
    $item3=GUICtrlCreateListViewItem("|A-65 673|Muster3|11|10|5",$lvBestell)
    GUICtrlSetState(-1, $GUI_CHECKED)
    $bVorschlag = GUICtrlCreateButton("Bestell-Vorschlag", 36, 12, 130, 21, 0)
    $bClearList = GUICtrlCreateButton("Liste löschen", 206, 48, 130, 21, 0)
    $bChangeMenge = GUICtrlCreateButton("Bestellmenge ändern", 376, 48, 130, 21, 0)
    $bPrintBestell = GUICtrlCreateButton("Bestellung drucken", 546, 12, 130, 21, 0)
    $bMailBestell = GUICtrlCreateButton("Bestellung mailen", 546, 48, 130, 21, 0)
    $bEscBestell = GUICtrlCreateButton("&Abbrechen", 782, 12, 69, 41, 0)
    $bAddArtikel = GUICtrlCreateButton("Artikel hinzufügen", 36, 48, 130, 21, 0)
    GUISetState(@SW_SHOW)

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $bEscBestell
    Exit
    Case $bChangeMenge
    $CurrIndex = _GUICtrlListViewGetCurSel($lvBestell)
    $CurrMenge = _GUICtrlListViewGetItemText($lvBestell, $CurrIndex, 5)
    $MengeNeu = InputBox("Bestellmenge","Bestellvorschlag:",$CurrMenge)
    _GUICtrlListViewSetItemText($lvBestell, $CurrIndex, 5, $MengeNeu)
    ;;
    EndSwitch
    WEnd

    [/autoit]


    EDIT 2:
    Habs nun mit eigener InputBox gelöst. Aber Danke für euren moralischen Beistand :rofl:
    So sieht das Endprodukt aus:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    #Include <GuiListView.au3>
    $BestellGUI = GUICreate("Bestellung", 870, 554, 110, 128, BitOr($WS_CAPTION, $WS_POPUP, $WS_SYSMENU), $WS_EX_TOPMOST)
    $lvBestell = GUICtrlCreateListView("|Artikel-Nr|Bezeichnung|Lagerbestand|Mindestbestand|Bestellmenge", 4, 84, 861, 465, -1,$LVS_EX_CHECKBOXES)
    GUICtrlSendMsg($lvBestell, $LVM_SETEXTENDEDLISTVIEWSTYLE, $LVS_EX_GRIDLINES, $LVS_EX_GRIDLINES)
    GUICtrlSendMsg($lvBestell, $LVM_SETEXTENDEDLISTVIEWSTYLE, $LVS_EX_FULLROWSELECT, $LVS_EX_FULLROWSELECT)
    _GUICtrlListViewSetColumnWidth(-1,0,30)
    _GUICtrlListViewSetColumnWidth(-1,1,120)
    _GUICtrlListViewSetColumnWidth(-1,2,100)
    _GUICtrlListViewSetColumnWidth(-1,3,90)
    _GUICtrlListViewSetColumnWidth(-1,4,90)
    _GUICtrlListViewSetColumnWidth(-1,5,90)
    $item1=GUICtrlCreateListViewItem("|0815|Muster1|3|5|4",$lvBestell)
    GUICtrlSetState(-1, $GUI_CHECKED)
    $item2=GUICtrlCreateListViewItem("|x2341|Muster2|24|15",$lvBestell)
    GUICtrlSetState(-1, $GUI_CHECKED)
    $item3=GUICtrlCreateListViewItem("|A-65 673|Muster3|11|10|5",$lvBestell)
    GUICtrlSetState(-1, $GUI_CHECKED)
    $bVorschlag = GUICtrlCreateButton("Bestell-Vorschlag", 36, 12, 130, 21, 0)
    $bClearList = GUICtrlCreateButton("Liste löschen", 206, 48, 130, 21, 0)
    $bChangeMenge = GUICtrlCreateButton("Bestellmenge ändern", 376, 48, 130, 21, 0)
    $bPrintBestell = GUICtrlCreateButton("Bestellung drucken", 546, 12, 130, 21, 0)
    $bMailBestell = GUICtrlCreateButton("Bestellung mailen", 546, 48, 130, 21, 0)
    $bEscBestell = GUICtrlCreateButton("&Abbrechen", 782, 12, 69, 41, 0)
    $bAddArtikel = GUICtrlCreateButton("Artikel hinzufügen", 36, 48, 130, 21, 0)
    ; GUI InBox
    $InBoxMenge = GUICreate("Änderung Bestell-Menge", 253, 102, -1, -1, BitOR($WS_CAPTION, _
    $WS_BORDER,$WS_CLIPSIBLINGS), BitOR($WS_EX_TOPMOST,$WS_EX_WINDOWEDGE))
    $InMenge = GUICtrlCreateInput("", 116, 22, 121, 21)
    $updown = GUICtrlCreateUpdown($InMenge)
    $bOKMenge = GUICtrlCreateButton("&OK", 81, 63, 75, 25, 0)
    $bEscMenge = GUICtrlCreateButton("&Cancel", 162, 63, 75, 25, 0)
    $Label1 = GUICtrlCreateLabel("Bestellvorschlag", 18, 25, 81, 17)

    [/autoit] [autoit][/autoit] [autoit]

    GUISetState(@SW_SHOW, $BestellGUI)

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $bEscBestell
    Exit
    Case $bChangeMenge
    $CurrIndex = _GUICtrlListViewGetCurSel($lvBestell)
    $CurrMenge = _GUICtrlListViewGetItemText($lvBestell, $CurrIndex, 5)
    GUICtrlSetData($InMenge, $CurrMenge)
    GUISetState(@SW_SHOW, $InBoxMenge)
    Case $bOKMenge
    GUISetState(@SW_HIDE, $InBoxMenge)
    _GUICtrlListViewSetItemText($lvBestell, $CurrIndex, 5, GUICtrlRead($InMenge))
    Case $bEscMenge
    GUISetState(@SW_HIDE, $InBoxMenge)
    ;;
    EndSwitch
    WEnd

    [/autoit]