Автор | Сообщение |
|
| постоянный участник
|
Пост N: 534
Зарегистрирован: 13.10.05
|
|
Отправлено: 30.03.16 12:01. Заголовок: Combo
Комбобокс строится на основании массива цитата: | DEFINE COMBOBOX Comb_F ROW 10 COL 110 WIDTH 1007 HEIGHT 100 ITEMS mFilter FONTNAME 'Arial' TOOLTIP '' END COMBOBOX |
| Массив mFilter в процессе работы меняется, а как Комбобокс обновить динамически.
|
|
|
Ответов - 10
[только новые]
|
|
|
| |
Пост N: 845
Зарегистрирован: 20.02.11
|
|
Отправлено: 30.03.16 12:31. Заголовок: Vlad04 пишет: как ..
Vlad04 пишет: цитата: | как Комбобокс обновить динамически. |
| подсмотреть в справке по комбику , которая поставляется вместе с минигуи и использовать методы METHODS: · AddItem( cItemText ) Add a new item to a ComboBox control · DeleteItem( nItemIndex ) Deletes an item from a ComboBox control · DeleteAllItems Deletes all items from a ComboBox control PS в примерах есть DinamicComdo
|
|
|
|
| постоянный участник
|
Пост N: 535
Зарегистрирован: 13.10.05
|
|
Отправлено: 30.03.16 12:40. Заголовок: Вообщем я так и сдел..
Вообщем я так и сделал. Думал, может есть короче
|
|
|
|
| |
Пост N: 846
Зарегистрирован: 20.02.11
|
|
Отправлено: 30.03.16 12:43. Заголовок: Vlad04 пишет: Дума..
Vlad04 пишет: короче есть только для комбика по DBF , там работает метод Refresh() При комбо по массиву Refresh вывалит с ошибкой так что только примерно так DoMethod( 'Form_1', 'Combo_1', 'DeleteAlItems') Aeval( aArray, { |e| DoMethod( 'Form_1', 'Combo_1', 'AddItem', e ) } )
|
|
|
|
| moderator
|
Пост N: 914
Зарегистрирован: 11.02.10
|
|
Отправлено: 30.03.16 17:16. Заголовок: Haz пишет: При комб..
Haz пишет: цитата: | При комбо по массиву Refresh вывалит с ошибкой |
| Добавил возможность обновлять ComboBox при изменении рабочего массива, ассоциированного с ним. Контрольный пример см.ниже Скрытый текст
/* * MiniGUI ComboBox Demo */ #include "minigui.ch" Function Main private aitems := { '1 | Uno' , '2 | Dos' , '3 | tres' } DEFINE WINDOW Form_1 ; AT 0,0 ; WIDTH 400 ; HEIGHT 200 ; TITLE 'ComboBox Demo' ; MAIN @ 10,10 COMBOBOX Control_1 ; WIDTH 100 ; ITEMS aitems ; VALUE 1 ; FONT 'Courier' SIZE 12 DEFINE BUTTON Control_2 ROW 10 COL 150 WIDTH 140 CAPTION 'Update Combo' VALUE 1 ACTION UpdateCombo('Control_1','Form_1') END BUTTON END WINDOW CENTER WINDOW Form_1 ACTIVATE WINDOW Form_1 Return Nil Function UpdateCombo(Control,Parent) aadd(aitems, '4 | kvadro') if len(aitems) > 4 asize(aitems, 4) endif //_HMG_aControlMiscData1 [GetControlIndex(Control,Parent)][4] := aitems DoMethod(Parent,Control,'Refresh') Return Nil
|
|
|
|
|
| |
Пост N: 847
Зарегистрирован: 20.02.11
|
|
Отправлено: 30.03.16 17:38. Заголовок: gfilatov2002 пишет: ..
gfilatov2002 пишет: цитата: | Добавил возможность обновлять ComboBox |
| Не совсем понятно как новый рабочий массив передается в комбо если он не private. Напрашивается новый метод типа SetArray( aArray ) и потом Refresh() по сути следующие две строки это и делают DoMethod( 'Form_1', 'Combo_1', 'DeleteAlItems') Aeval( aArray, { |e| DoMethod( 'Form_1', 'Combo_1', 'AddItem', e ) } )
|
|
|
|
| moderator
|
Пост N: 915
Зарегистрирован: 11.02.10
|
|
Отправлено: 31.03.16 13:32. Заголовок: Haz пишет: Напрашив..
Haz пишет: цитата: | Напрашивается новый метод типа SetArray( aArray ) |
| БЛАГОДАРЮ ЗА ПОДСКАЗКУ Добавил новый метод SetArray( aArray ) для элементов управления COMBOBOX, GRID и LISTBOX Тестовый пример ниже Скрытый текст
/* * MiniGUI ComboBox Demo */ #include "minigui.ch" memvar aitems Function Main private aItems := { '1 | Uno' , '2 | Dos' , '3 | tres' } DEFINE WINDOW Form_1 ; AT 0,0 ; WIDTH 400 ; HEIGHT 200 ; TITLE 'ComboBox Demo' ; MAIN @ 10,10 COMBOBOX Control_1 ; WIDTH 130 ; ITEMS {""} ; VALUE 1 ; LOWERCASE ; FONT 'Courier New' SIZE 12 DEFINE BUTTON Control_2 ROW 10 COL 150 WIDTH 140 CAPTION 'Update Combo' VALUE 1 ACTION UpdateCombo( 'Control_1', 'Form_1' ) END BUTTON DEFINE BUTTON Control_3 ROW 40 COL 150 WIDTH 140 CAPTION 'Update Combo 2' VALUE 1 ACTION UpdateCombo2( 'Control_1', 'Form_1' ) END BUTTON END WINDOW Form_1.Control_1.SetArray( aItems ) CENTER WINDOW Form_1 ACTIVATE WINDOW Form_1 Return Nil // Private array Function UpdateCombo( Control, Parent ) aadd(aitems, '4 | quattro') aadd(aitems, '5 | cinque') aadd(aitems, '6 | senco') aadd(aitems, '7 | ses') if len(aitems) > 7 asize(aitems, 7) endif DoMethod( Parent, Control, 'Refresh' ) Return Nil // Local array Function UpdateCombo2( Control, Parent ) local aNewValues := { '1 | Uno' , '2 | Dos' , '3 | tres', '4 | quattro', '5 | cinque', '6 | senco', '7 | ses' } DoMethod( Parent, Control, 'SetArray', aNewValues ) Return Nil
|
|
|
|
|
| постоянный участник
|
Пост N: 537
Зарегистрирован: 13.10.05
|
|
Отправлено: 01.04.16 09:45. Заголовок: gfilatov2002 Добави..
gfilatov2002 цитата: | Добавил возможность обновлять ComboBox при изменении рабочего массива Добавил новый метод SetArray( aArray ) |
| Появится после очередного обновления ?
|
|
|
|
| moderator
|
Пост N: 916
Зарегистрирован: 11.02.10
|
|
Отправлено: 01.04.16 09:54. Заголовок: Vlad04 пишет: Появи..
Vlad04 пишет: цитата: | Появится после очередного обновления ? |
| Да, в апрельской сборке С 1 апреля поздравляю Вас, кстати, из столицы юмора
|
|
|
|
| постоянный участник
|
Пост N: 4852
Зарегистрирован: 12.09.06
|
|
Отправлено: 16.04.16 22:37. Заголовок: gfilatov2002 пишет: ..
gfilatov2002 пишет: цитата: | DoMethod( Parent, Control, 'SetArray', aNewValues ) |
| Классный метод. Сокращает написания кода. А как сделать два COMBOBOX, чтобы у второго значения массива изменялось по первому ? Т.е. типа справочника: COMBOBOX-ГОРОД и COMBOBOX-УЛИЦЫ.... Вот примерно так, но у меня не получилось.... Скрытый текст /* * MiniGUI ComboBox Demo */ #include "minigui.ch" Function Main Local aCity := { '5 | Paris' , '6 | Berlin' , '7 | Vena' } Local nI, aDim := {}, aStreet := {}, nCity, nStreet AADD( aDim, { 1,"Street-10", 5 } ) // Paris AADD( aDim, { 2,"Street-11", 5 } ) // Paris AADD( aDim, { 7,"Street-1" , 6 } ) // Berlin AADD( aDim, { 8,"Street-2" , 6 } ) // Berlin AADD( aDim, { 9,"Street-3" , 6 } ) // Berlin AADD( aDim, {12,"Street-0" , 7 } ) // Vena AADD( aDim, {14,"Street-5" , 7 } ) // Vena FOR nI := 1 TO LEN(aStreet) AADD( aStreet, HB_NtoS(aDim[nI,1])+" | "+aDim[nI,2]+" | "+HB_NtoS(aDim[nI,3]) ) NEXT DEFINE WINDOW Form_1 ; AT 0,0 ; WIDTH 400 ; HEIGHT 300 ; TITLE 'ComboBox Demo 2x' ; MAIN ; FONT 'Courier New' SIZE 16 @ 20,40 COMBOBOX Control_1 ; WIDTH 280 ; ITEMS aCity ; VALUE 1 ; LOWERCASE ; ON CHANGE { || nCity := Form_1.Control_1.Value ,; UpdateCombo2( 'Control_2', 'Form_1', nCity, aDim, @aStreet ) } @ 80,40 COMBOBOX Control_2 ; WIDTH 280 ; ITEMS aStreet ; VALUE 1 ; LOWERCASE ON CHANGE {|| nStreet := Form_1.Control_2.Value } DEFINE BUTTON Button_Exit ROW 200 COL 200 WIDTH 140 CAPTION 'Exit' VALUE 1 ACTION {|| MsgDebug("City=",nCity," Street=",nStreet), ThisWindow.Release } END BUTTON END WINDOW //Form_1.Control_1.SetArray( aStreet ) CENTER WINDOW Form_1 ACTIVATE WINDOW Form_1 Return Nil // Local array Function UpdateCombo2( Control, Parent, nCity, aDim, aStreet ) Local nI aStreet := {} // обнуляем массив улиц For nI := 1 TO LEN(aDim) If aDim[nI,3] == nCity AADD( aStreet, HB_NtoS(aDim[nI,1])+" | "+aDim[nI,2]+" | "+HB_NtoS(aDim[nI,3]) ) Endif Next DoMethod( Parent, Control, 'SetArray', aStreet ) Return Nil
| P.S. Собирал новой версией 1604.
|
|
|
|
| |
Пост N: 892
Зарегистрирован: 20.02.11
|
|
Отправлено: 17.04.16 13:29. Заголовок: Andrey пишет: Вот п..
Andrey пишет: цитата: | Вот примерно так, но у меня не получилось |
| Потому что в функции UpdateCombo2() сравниваешь теплое с мягким ( If aDim[nI,3] == nCity ) и результирующий массив будет всегда пуст
|
|
|
|