2015-09-20 2 views
0

Я связал приложение livecode с реляционной базой данных. Я хочу использовать combobox для отображения значений, связанных с идентификатором. Я и другие программы, такие как msaccess, выполняются с помощью combobox с двумя столбцами. Первый связан с идентификатором и устанавливается в 0 ширины, а второй отображает соответствующее значение. Это возможно в livecode?Содержит ли Livobode combobox несколько столбцов

У меня есть текстовое поле и поле списка, и мне удалось заставить его работать, используя следующий код на rawkeyup

global strHilitedLine,strTempHilitedLine,booAfterReturn,booFirstKeyUp 

on keyup -- when your press a character key 

    TempHilited 


end keyup 

on returninfield --when user press return key on keyboard 

--accept the temporary hilite 
    put the hilitedLine of field "lstfood" into strHilitedLine 

    put empty into strTempHilitedLine 

    --set booFirstKeyUp to true so that the keyup command will know that 
    -- the next keyup is the first after clicking the enter/return key 
    put "True" into booFirstKeyUp 
    --clear field txtfood 
    put empty into fld "txtFood" 

end returninfield 

on enterkey --when user press enter key on mobile(code same as on returninfield) 

    set the hilitedLine of field "lstfood" to strTempHilitedLine 
    put the hilitedLine of field "lstfood" into strHilitedLine 
    put empty into strTempHilitedLine 
    put "True" into booFirstKeyUp 
    put empty into fld "txtFood" 

end enterkey 

on TempHilited 

    if booFirstKeyUp="True" then 
    --store the value of hilitedline if this is the first keyup after 
    -- clicking enter(see on enterkey) 

     put the hilitedLine of field "lstfood" into strHilitedLine 
     put "False" into booFirstKeyUp 

    end if 

    --set hilitedlines to the hilitedlines just after clicking enter 
    set the hilitedLine of field "lstfood" to strHilitedLine 

    -- cleartemporary hilitedlines from previous keyup 
    put empty into strTempHilitedLine 

    -- create array from field lstFood and find if the text in txtFood 
    -- appears at the start of any item in the array 
    put field "lstfood" into arrFood 
    filter lines of arrFood with regex pattern "^" & me into strLineText 

    --create new value to temporarily hilite 
    if the length of strHilitedLine>0 and the length of strLineText>0 then 

     put strHilitedLine & "," & lineoffset (strLineText ,field 
    "lstfood") after strTempHilitedLine 

    else if the length of strHilitedLine>0 then 

     put strHilitedLine into strTempHilitedLine 

    else if the length of strLineText>0 then 

     put lineoffset (strLineText ,field "lstfood") into strTempHilitedLine 

    end if 

--set temporay hilite 
    set the hilitedLine of field "lstfood" to strTempHilitedLine 
    put the length of me into mylength 

    --Select the part of txtFood that user did to type so that it is overwritten on the next keyup 
    put strlinetext into field "txtFood" 
    select char mylength +1 to the length of me of field "txtFood" 

End TempHilited 

Как вы можете видеть, что это длинный извилистый код. Рад слышать, если у вас есть более - эффективный способ достижения этого.

Вы упомянули «Храните данные в настраиваемом свойстве, фильтруйте, чтобы включить соответствующие строки, поместите оставшиеся данные в поле», и я считаю, что вы ссылались на другой метод его выполнения, но я не очень-то разбираюсь в том, как сделайте это

ответ

0

Нет, кнопки меню не позволяют использовать несколько столбцов в LiveCode. Тем не менее, можно сделать свой собственный combobox, например. используя панель стека для меню и добавив два поля в этот стек. Используйте указатель свойств кнопки меню, чтобы назначить стек как панель стека.

Я сделал такую ​​панель стека, только один столбец, некоторое время назад:

enter image description here

Было бы легко сделать это меню две колонки: просто сделать поле половину ширины , добавьте другое поле и обновите hilitedLine поля, которое не имеет фокуса при изменении hilitedLine сфокусированного поля. Этот пример не является реальной панелью стека, но он работает почти так же. Я открываю стек, скрытый как палитру, задает размер и местоположение и показываю, что он имеет фокус.

(Изображение с моего собственного сайта, библиотека находится в зоне, доступной только для доноров).

+0

Привет, Марк, я немного потерял. Я вижу поле списка и текстовое поле на картинке. Кажется, что поле списка становится популярным при вводе текстового поля. Как вы это делаете. Также сколько пожертвований требуется для доступа к вашей библиотеке. – Sheils

+0

@ Шейла. Я предпочел бы быть умеренным с саморекламой, так что, возможно, вы можете связаться со мной по другому каналу и спросить меня снова? Поле списка находится в другом стеке, который открывается как палитра. Поле содержит скрипт, который просто фильтрует и отображает список. Хилит выполняется с помощью мыши или клавиш со стрелками. – Mark

+0

Привет, Марк, я медленно работаю, если нет. У меня есть текстовое поле и поле списка, и, используя следующий код, я могу найти строку в поле списка, содержащую строку в текстовом поле. Я могу позже использовать значение lineoffset для hilite строки соответствия. 'на rawkeyup ответа lineoffset (я, поле«lstfood») конца rawkeyup' Но это собирание любой строки в поле списка, который содержит строку из текстового поля. Я хочу только выбрать те из списка, которые начинаются со строки в текстовом поле. Я свяжусь с вами позже на вашем сайте. Кстати, меня зовут Sheils (Male). Cheers – Sheils