Автор Тема: Заполнение Edit в зависимости от выбранного Combo  (Прочитано 584 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн joparezzz [?]

  • Новичок
  • *
  • Сообщений: 62
  • Репутация: 0
  • Пол: Мужской
    • Награды
На данный момент заполняется поле Edit в зависимости от выбранного Combo.
как сделать чтоб в поле Edit попадали значения от всех элементов Combo?
Код: AutoIt [Выделить]
#include <Array.au3>
#include <ComboConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#Include <EditConstants.au3>
#Include <GUIComboBox.au3>

$Form1 = GUICreate("Form1", 615, 437, 192, 124)
$Combo1 = GUICtrlCreateCombo("", 56, 56, 145, 25, BitOR($CBS_DROPDOWN,$CBS_AUTOHSCROLL))
$Combo2 = GUICtrlCreateCombo("", 248, 56, 145, 25, BitOR($CBS_DROPDOWN,$CBS_AUTOHSCROLL))
$Combo3 = GUICtrlCreateCombo("", 56, 156, 145, 25, BitOR($CBS_DROPDOWN,$CBS_AUTOHSCROLL))
$Combo4 = GUICtrlCreateCombo("", 248, 156, 145, 25, BitOR($CBS_DROPDOWN,$CBS_AUTOHSCROLL))
$Edit1 = GUICtrlCreateEdit("", 40, 280, 537, 137)
GUISetState(@SW_SHOW)

Local $aArray[][] =     [ _
                        ["Шкафа связи",   "?x?x?",    "600x600x2100",     "",                 ""  ], _
                        ["ШТМ",              "?x?x?",    "800x600x2000",     "1000x600x2000",    ""  ], _
                        ["Шкаф ЗИП",     "?x?x?",    "600х450х700",        "600х600х800",        ""  ], _
                        ["ШОС",              "?x?x?",    "600x600x2000",     "600x600x2160",     ""  ], _
                        ["ШУМПС",          "?x?x?",    "600х250х800",        "",                 ""  ]]

For $i = 0 To UBound($aArray, 1) - 1
    _GUICtrlComboBox_AddString($Combo1, $aArray[$i][0])
    _GUICtrlComboBox_AddString($Combo3, $aArray[$i][0])
Next


While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
        Case $Combo1
            _GUICtrlComboBox_ResetContent($Combo2)
            $Index = _GUICtrlComboBox_GetCurSel($Combo1)
            For $j = 1 To Ubound($aArray, 2) - 1
                If $aArray[$Index][$j] = "" Then ExitLoop
                _GUICtrlComboBox_AddString($Combo2, $aArray[$Index][$j])
            Next
            _GUICtrlComboBox_SetCurSel($Combo2, 0)
            GUICtrlSetData($Edit1, GUICtrlRead($Combo1) & ': ' & GUICtrlRead($Combo2) & ' мм (ШхГхВ);' & @CRLF)

        Case $Combo2
            GUICtrlSetData($Edit1, GUICtrlRead($Combo1) & ': ' & GUICtrlRead($Combo2) & ' мм (ШхГхВ);' & @CRLF)

        Case $Combo3
            _GUICtrlComboBox_ResetContent($Combo4)
            $Index = _GUICtrlComboBox_GetCurSel($Combo3)
            For $j = 1 To Ubound($aArray, 2) - 1
                If $aArray[$Index][$j] = "" Then ExitLoop
                _GUICtrlComboBox_AddString($Combo4, $aArray[$Index][$j])
            Next
            _GUICtrlComboBox_SetCurSel($Combo4, 0)
            GUICtrlSetData($Edit1, GUICtrlRead($Combo3) & ': ' & GUICtrlRead($Combo4) & ' мм (ШхГхВ);' & @CRLF)

        Case $Combo4
            GUICtrlSetData($Edit1, GUICtrlRead($Combo3) & ': ' & GUICtrlRead($Combo4) & ' мм (ШхГхВ);' & @CRLF)

    EndSwitch
WEnd
 

« Последнее редактирование: Апрель 04, 2018, 15:10:00 от joparezzz »

Русское сообщество AutoIt

Заполнение Edit в зависимости от выбранного Combo
« Отправлен: Апрель 04, 2018, 14:55:16 »

Помечен как лучший ответ пользователем joparezzz Отправлен Апрель 04, 2018, 15:38:03

Оффлайн Tempo [?]

  • Продвинутый
  • ***
  • Сообщений: 404
  • Репутация: 93
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Код: AutoIt [Выделить]
#include <AutoItConstants.au3>
#include <GUIConstants.au3>
#include <GUIComboBox.au3>

Global $aInfo[][] = [["Шкафа связи", "?x?x?", "600x600x2100"], _
        ["ШТМ", "?x?x?", "800x600x2000", "1000x600x2000"], _
        ["Шкаф ЗИП", "?x?x?", "600х450х700", "600х600х800"], _
        ["ШОС", "?x?x?", "600x600x2000", "600x600x2160"], _
        ["ШУМПС", "?x?x?", "600х250х800"]]
Global $aCombo[3][2] = [[2]], $iEdit1
GUICreate("", 615, 435, 190, 125)
_CreateCombo()
$iEdit1 = GUICtrlCreateEdit("", 40, 280, 535, 135)
GUISetState()

While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            Exit
        Case $aCombo[1][0]
            _UpdateCombo(1)
        Case $aCombo[2][0]
            _UpdateCombo(2)
        Case $aCombo[1][1], $aCombo[2][1]
            _UpdateEdit()
    EndSwitch
WEnd

Func _CreateCombo()
    $aCombo[1][0] = GUICtrlCreateCombo("", 55, 55, 145, 25, BitOR($CBS_DROPDOWN, $CBS_AUTOHSCROLL))
    $aCombo[1][1] = GUICtrlCreateCombo("", 250, 55, 145, 25, BitOR($CBS_DROPDOWN, $CBS_AUTOHSCROLL))
    $aCombo[2][0] = GUICtrlCreateCombo("", 55, 155, 145, 25, BitOR($CBS_DROPDOWN, $CBS_AUTOHSCROLL))
    $aCombo[2][1] = GUICtrlCreateCombo("", 250, 155, 145, 25, BitOR($CBS_DROPDOWN, $CBS_AUTOHSCROLL))
    For $i = 1 To $aCombo[0][0]
        For $j = 0 To UBound($aInfo) - 1
            GUICtrlSetData($aCombo[$i][0], $aInfo[$j][0])
        Next
    Next
EndFunc   ;==>_CreateCombo

Func _UpdateCombo($iIndex)
    Local $iSel = _GUICtrlComboBox_GetCurSel($aCombo[$iIndex][0])
    GUICtrlSetData($aCombo[$iIndex][1], "")
    For $i = 1 To UBound($aInfo, $UBOUND_COLUMNS) - 1
        If $aInfo[$iSel][$i] Then GUICtrlSetData($aCombo[$iIndex][1], $aInfo[$iSel][$i])
    Next
    _GUICtrlComboBox_SetCurSel($aCombo[$iIndex][1], 0)
    _UpdateEdit()
EndFunc   ;==>_UpdateCombo

Func _UpdateEdit()
    Local $sTemp, $sRead
    For $i = 1 To $aCombo[0][0]
        $sTemp = GUICtrlRead($aCombo[$i][0])
        If $sTemp Then $sRead &= $sTemp & ': ' & GUICtrlRead($aCombo[$i][1]) & ' мм (ШхГхВ);' & @CRLF
    Next
    GUICtrlSetData($iEdit1, $sRead)
EndFunc   ;==>_UpdateEdit


Оффлайн joparezzz [?]

  • Новичок
  • *
  • Сообщений: 62

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
Спасибо) прекрасно работает)))


Добавлено: Апрель 04, 2018, 16:07:51
а можно ли $aCombo[1][1] и $aCombo[2][1] заменить на один List?
причем чтобы в List попадали только те значения с каким Combo в данный момент работаешь?
« Последнее редактирование: Апрель 04, 2018, 16:08:31 от joparezzz »

Оффлайн Tempo [?]

  • Продвинутый
  • ***
  • Сообщений: 404
  • Репутация: 93
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Код: AutoIt [Выделить]
#include <AutoItConstants.au3>
#include <GUIConstants.au3>
#include <GUIComboBox.au3>
#include <GUIListBox.au3>
#include <WinAPI.au3>

Global $aCombo[3] = [2], $aValues[3] = [2], $iFocusIndex, $iEdit, $iList
Global $aInfo[][] = [["Шкафа связи", "?x?x?", "600x600x2100"], _
        ["ШТМ", "?x?x?", "800x600x2000", "1000x600x2000"], _
        ["Шкаф ЗИП", "?x?x?", "600х450х700", "600х600х800"], _
        ["ШОС", "?x?x?", "600x600x2000", "600x600x2160"], _
        ["ШУМПС", "?x?x?", "600х250х800"]]

GUICreate("", 330, 330)
$iList = GUICtrlCreateList("", 170, 10, 150, 150)
$iEdit = GUICtrlCreateEdit("", 10, 170, 310, 150)
_CreateCombo()
GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")
GUISetState()

While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            Exit
        Case $aCombo[1]
            _UpdateList(1)
        Case $aCombo[2]
            _UpdateList(2)
        Case $iList
            _UpdateEdit()
    EndSwitch
WEnd

Func _CreateCombo()
    Local $iY = 10
    For $i = 1 To $aCombo[0]
        $aCombo[$i] = GUICtrlCreateCombo("", 10, $iY, 150, 20, BitOR($CBS_DROPDOWN, $CBS_AUTOHSCROLL))
        For $j = 0 To UBound($aInfo) - 1
            GUICtrlSetData($aCombo[$i], $aInfo[$j][0])
        Next
        $iY += 30
    Next
EndFunc   ;==>_CreateCombo

Func _UpdateList($iIndex)
    Local $iSel = _GUICtrlComboBox_GetCurSel($aCombo[$iIndex])
    If $iSel >= 0 Then
        GUICtrlSetData($iList, "")
        For $i = 1 To UBound($aInfo, $UBOUND_COLUMNS) - 1
            If $aInfo[$iSel][$i] Then GUICtrlSetData($iList, $aInfo[$iSel][$i])
        Next
    EndIf
EndFunc   ;==>_UpdateList

Func _UpdateEdit()
    Local $sData
    If _GUICtrlListBox_GetCurSel($iList) >= 0 Then
        $aValues[$iFocusIndex] = GUICtrlRead($iList)
        For $i = 1 To $aCombo[0]
            If $aValues[$i] Then $sData &= GUICtrlRead($aCombo[$i]) & ": " & $aValues[$i] & " мм (ШхГхВ);" & @CRLF
        Next
        GUICtrlSetData($iEdit, $sData)
    EndIf
EndFunc   ;==>_UpdateEdit

Func WM_COMMAND($hWnd, $iMsg, $wParam, $lParam)
    Switch _WinAPI_HiWord($wParam)
        Case $CBN_SETFOCUS
            Switch _WinAPI_LoWord($wParam)
                Case $aCombo[1]
                    $iFocusIndex = 1
                    _UpdateList(1)
                Case $aCombo[2]
                    $iFocusIndex = 2
                    _UpdateList(2)
            EndSwitch
    EndSwitch
EndFunc   ;==>WM_COMMAND


Русское сообщество AutoIt

Re: Заполнение Edit в зависимости от выбранного Combo
« Ответ #3 Отправлен: Апрель 04, 2018, 17:38:00 »

Оффлайн joparezzz [?]

  • Новичок
  • *
  • Сообщений: 62

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
Крутяк))))


Добавлено: Апрель 04, 2018, 18:50:55
Немного откорректировал, добавил еще пару Combo, а также в $aInfo добавил комментарии #, которые попадают в $iListC, а потом в Edit. Но например выбрал комментарий, а потом решил, что комментарий в Edit не нужно. Как реализовать очистку комментария? или лучше просто создать пустой комментарий в массиве $aInfo?
Код: AutoIt [Выделить]
#include <AutoItConstants.au3>
#include <GUIConstants.au3>
#include <GUIComboBox.au3>
#include <GUIListBox.au3>
#include <WinAPI.au3>

Global $aCombo[6] = [5], $aValues[6] = [5], $aValuesC[6] = [5], $iFocusIndex, $iEdit, $iList, $iListC
Global $aInfo[][] = [["Шкафа связи", "?x?x?", "600x600x2100", "#Комментарий 1", "#Комментарий 2"], _
        ["ШТМ", "?x?x?", "800x600x2000", "1000x600x2000"], _
        ["Шкаф ЗИП", "?x?x?", "600х450х700", "600х600х800"], _
        ["ШОС", "?x?x?", "600x600x2000", "600x600x2160"], _
        ["ШУМПС", "?x?x?", "600х250х800"]]


#include <Array.au3>
#include <Excel.au3>
$SorceFile = @ScriptDir & "\База данных.xlsx"
Local $oExcel = _Excel_Open(False, True, False, True, True)
Local $oWorkbook = _Excel_BookOpen($oExcel, $SorceFile)
;Local $aInfo = _Excel_RangeRead($oWorkbook, Default, $oWorkbook.Sheets(1).Usedrange.Columns("A:F"), 1)
_Excel_Close($oExcel, False, True)


GUICreate("", 330, 330)
$iList = GUICtrlCreateList("", 170, 10, 150, 150-78)
$iListC = GUICtrlCreateList("", 170, 90, 150, 150-78)
$iEdit = GUICtrlCreateEdit("", 10, 170, 310, 150)
_CreateCombo()
GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")
GUISetState()

While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            Exit
        Case $aCombo[1]
            _UpdateList(1)
        Case $aCombo[2]
            _UpdateList(2)
        Case $aCombo[3]
            _UpdateList(3)
        Case $aCombo[4]
            _UpdateList(4)
        Case $aCombo[5]
            _UpdateList(5)
        Case $iList
            _UpdateEdit()
        Case $iListC
            _UpdateEdit()
    EndSwitch
WEnd

Func _CreateCombo()
    Local $iY = 10
    For $i = 1 To $aCombo[0]
        $aCombo[$i] = GUICtrlCreateCombo("", 10, $iY, 150, 20, BitOR($CBS_DROPDOWN, $CBS_AUTOHSCROLL))
        For $j = 0 To UBound($aInfo) - 1
            GUICtrlSetData($aCombo[$i], $aInfo[$j][0])
        Next
        $iY += 30
    Next
EndFunc   ;==>_CreateCombo

Func _UpdateList($iIndex)
    Local $iSel = _GUICtrlComboBox_GetCurSel($aCombo[$iIndex])
    If $iSel >= 0 Then
        GUICtrlSetData($iList, "")
        GUICtrlSetData($iListC, "")
        For $i = 1 To UBound($aInfo, $UBOUND_COLUMNS) - 1
            If $aInfo[$iSel][$i] And StringLeft($aInfo[$iSel][$i], 1) <> '#' Then GUICtrlSetData($iList, $aInfo[$iSel][$i])
            If StringLeft($aInfo[$iSel][$i], 1) = '#' Then GUICtrlSetData($iListC, StringTrimLeft($aInfo[$iSel][$i], 1))
        Next
    EndIf
EndFunc   ;==>_UpdateList

Func _UpdateEdit()
    Local $sData
    If _GUICtrlListBox_GetCurSel($iList) >= 0 Or _GUICtrlListBox_GetCurSel($iListC) >= 0 Then
        $aValues[$iFocusIndex] = GUICtrlRead($iList)
        $aValuesC[$iFocusIndex] = GUICtrlRead($iListC)
        For $i = 1 To $aCombo[0]
            If $aValues[$i] Or  $aValuesC[$i] Then $sData &= GUICtrlRead($aCombo[$i]) & ": " & $aValues[$i] & " мм (ШхГхВ);" & $aValuesC[$i] & @CRLF
        Next
        GUICtrlSetData($iEdit, $sData)
    EndIf
EndFunc   ;==>_UpdateEdit

Func WM_COMMAND($hWnd, $iMsg, $wParam, $lParam)
    Switch _WinAPI_HiWord($wParam)
        Case $CBN_SETFOCUS
            Switch _WinAPI_LoWord($wParam)
                Case $aCombo[1]
                    $iFocusIndex = 1
                    _UpdateList(1)
                Case $aCombo[2]
                    $iFocusIndex = 2
                    _UpdateList(2)
                Case $aCombo[3]
                    $iFocusIndex = 3
                    _UpdateList(3)
                Case $aCombo[4]
                    $iFocusIndex = 4
                    _UpdateList(4)
                Case $aCombo[5]
                    $iFocusIndex = 5
                    _UpdateList(5)
            EndSwitch
    EndSwitch
EndFunc   ;==>WM_COMMAND

 

« Последнее редактирование: Апрель 04, 2018, 19:13:24 от joparezzz »

Русское сообщество AutoIt

Re: Заполнение Edit в зависимости от выбранного Combo
« Ответ #4 Отправлен: Апрель 04, 2018, 17:51:58 »

 

Похожие темы

  Тема / Автор Ответов Последний ответ
2 Ответов
4470 Просмотров
Последний ответ Январь 24, 2010, 15:17:00
от CreatoR
0 Ответов
2371 Просмотров
Последний ответ Январь 16, 2012, 22:59:53
от Rimm
1 Ответов
1763 Просмотров
Последний ответ Март 08, 2012, 22:13:47
от Zaramot
6 Ответов
5031 Просмотров
Последний ответ Июнь 05, 2012, 15:38:32
от general66
2 Ответов
1956 Просмотров
Последний ответ Январь 22, 2013, 01:15:29
от BestProTop
2 Ответов
2072 Просмотров
Последний ответ Ноябрь 23, 2013, 18:50:34
от axmen20010
2 Ответов
1642 Просмотров
Последний ответ Февраль 11, 2014, 08:49:21
от Tiberium6
2 Ответов
1430 Просмотров
Последний ответ Май 12, 2014, 10:02:07
от royalfint
1 Ответов
1399 Просмотров
Последний ответ Декабрь 30, 2014, 12:50:46
от firex
2 Ответов
1609 Просмотров
Последний ответ Июнь 01, 2015, 19:45:57
от madmasles