Myicq Posted November 14, 2012 Share Posted November 14, 2012 This question must have been asked before, but I just can't seem to find it. So forgive me if asking in duplicate... I have a small app where users must select a function to execute against their data. The function consists of 3 parts: pre, main, post. All setup is from an SQLite database. My question is: how can I present the choice to the user, and at the same time be sure to receive a unique ID on the function ? Essentially I would like to have a dropdown with two columns: ID and value, where ID is returned to me, while value is presented to user. I COULD of course match against "description", but it MAY happen that descriptions are not unique. Example: 1;function A 2;function B 3;newfunc 4;newfunc 5;last function here Is there any way to do this ? I have been considering listview controls, but would prefer dropdown. However a dropdown consisting of [id] & ":" & [desc] to give [1:function A] is not quite desired. Hope I have been clear enough. I am just a hobby programmer, and nothing great to publish right now. Link to comment Share on other sites More sharing options...
JohnOne Posted November 14, 2012 Share Posted November 14, 2012 (edited) If these functions may not have unique descriptions, I have to logically assume that they are dynamically added by the user. if that is correct then I would dynamically add an ID when that happens. Edited November 14, 2012 by JohnOne AutoIt Absolute Beginners Require a serial Pause Script Video Tutorials by Morthawt ipify Monkey's are, like, natures humans. Link to comment Share on other sites More sharing options...
jmon Posted November 14, 2012 Share Posted November 14, 2012 (edited) how about something like this? A 2D array that holds the value and the function associated with it. Notice that value 1 and 2 execute the function _a() and value 3 execute the function _b(): expandcollapse popup#include <GUIConstantsEx.au3> Opt("GUIOnEventMode", 1) $GUI = GUICreate("Test", 400, 600) $COMBO = GUICtrlCreateCombo("", 20, 40, 360) GUICtrlSetOnEvent($COMBO, "_Events") GUISetOnEvent($GUI_EVENT_CLOSE, "_Events") GUISetState() ;Declare the array that hold the controlID and the function to execute: Global $aValues[3][2] = [["value 1", "_a()"], ["Value 2", "_a()"], ["Value 3", "_b()"]] ;Fill the combo with the values: Global $sComboValues For $i = 0 To UBound($aValues) -1 $sComboValues &= $aValues[$i][0] & "|" Next GUICtrlSetData($COMBO, $sComboValues, $aValues[0][0]) While 1 Sleep(250) WEnd Func _Events() Switch @GUI_CtrlId Case $GUI_EVENT_CLOSE Exit Case $COMBO ;read the value in the combo: Local $ValueSelected = GUICtrlRead($COMBO) ;Search the value in the array: For $i = 0 To UBound($aValues) -1 If $aValues[$i][0] = $ValueSelected Then ;Found then execute the function Return Execute($aValues[$i][1]) EndIf Next EndSwitch EndFunc Func _a() MsgBox(0, "Func A", "Func A executed") EndFunc Func _b() MsgBox(0, "Func B", "Func B executed") EndFunc That would also work with a listview, if you can prepare your array before and then fill the listview with the values from the array. Edited November 14, 2012 by jmon [center]www.jmontserrat.comFile Sequence UDF - _StringExtractPaths - _StringTrimPattern - GuiCtrlSetOnTop - CalendarUDF[/center] Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now