Damein Posted March 4, 2014 Posted March 4, 2014 So I have an ini document I am pulling data from and throwing into a combobox, and then allowing someone to select it and remove it if wanted. But I'm running into two problems. A: It removes all but 1 B: If I remove all comments and then try to check that again, it errors out. Obviously the B I can just throw in a check to see if there are any values in the ini, but I think I am going about this the wrong way. Opt("GUIOnEventMode", 1) #include <Array.au3> $CurrentGui = "Comments" $RemoveCommentGui = GUICreate("Comments", 200, 110) $CommentList = GUICtrlCreateCombo("", 20, 10, 160, 30) $CurrentComment = IniReadSection(@ScriptDir & "\Test.ini", "Comments") For $i = 1 To $CurrentComment[0][0] GUICtrlSetData(-1, $CurrentComment[$i][1]) Next $DeleteButton = GUICtrlCreateButton("Remove", 50, 40, 100, 30) GUICtrlSetOnEvent(-1, "_RemoveCommentFromList") $CancelButton = GUICtrlCreateButton("Cancel", 50, 80, 100, 30) GUISetBkColor(0xFFFFFF) GUISetFont(12) GUISetState() Func _RemoveCommentFromList() $CommentToRemove = GUICtrlRead($CommentList) $Find = _ArraySearch($CurrentComment, $CommentToRemove) $Delete = _ArrayDelete($CurrentComment, $Find) IniDelete(@ScriptDir & "\Test.ini", "Comments") For $i = 1 To $CurrentComment[0][0] - 1 IniWriteSection(@ScriptDir & "\Test.ini", "Comments", $i & "=" & $CurrentComment[$i][1]) Next EndFunc ;==>_RemoveCommentFromList While 1 Sleep(10) WEnd Just create an INI with the script named Test.ini Thanks! Most recent sig. I made Quick Launcher W/ Profiles Topic Movie Database Topic & Website | LiveStreamer Pro Website | YouTube Stand-Alone Playlist Manager: Topic | Weather Desktop Widget: Topic | Flash Memory Game: Topic | Volume Control With Mouse / iTunes Hotkeys: Topic | Weather program: Topic | Paws & Tales radio drama podcast mini-player: Topic | Quick Math Calculations: Topic
orbs Posted March 4, 2014 Posted March 4, 2014 (edited) when you write to ini, you incorrectly use IniWriteSection() while you actually mean to use IniWrite() , like this: IniWrite(@ScriptDir & "\Test.ini", "Comments", $i, $CurrentComment[$i][1]) also, your code will only work for one time. this is because after an element is removed, 1) the ComboBox is not updated. what is a user supposed to think? 2) you do not update element [0][0] to be reduced by one. so basically, you have to quit the GUI when one element is removed - or take care of the above conditions. PS did my reply to the topic below work for you? '?do=embed' frameborder='0' data-embedContent>> Edited March 4, 2014 by orbs Signature - my forum contributions: Spoiler UDF: LFN - support for long file names (over 260 characters) InputImpose - impose valid characters in an input control TimeConvert - convert UTC to/from local time and/or reformat the string representation AMF - accept multiple files from Windows Explorer context menu DateDuration - literal description of the difference between given dates Apps: Touch - set the "modified" timestamp of a file to current time Show For Files - tray menu to show/hide files extensions, hidden & system files, and selection checkboxes SPDiff - Single-Pane Text Diff
Damein Posted March 4, 2014 Author Posted March 4, 2014 I attempted to revise the code how I felt like I needed but it still doesn't work right. expandcollapse popupOpt("GUIOnEventMode", 1) #include <Array.au3> #include <GUIConstantsEx.au3> Global $CurrentComment, $CommentList, $RemoveCommentGUI _Test() Func _Test() $CurrentGui = "Comments" $RemoveCommentGui = GUICreate("Comments", 200, 110) GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit") $CommentList = GUICtrlCreateCombo("", 20, 10, 160, 30) $CurrentComment = IniReadSection(@ScriptDir & "\Test.ini", "Comments") For $i = 1 To $CurrentComment[0][0] GUICtrlSetData(-1, $CurrentComment[$i][1]) Next $DeleteButton = GUICtrlCreateButton("Remove", 50, 40, 100, 30) GUICtrlSetOnEvent(-1, "_RemoveCommentFromList") $CancelButton = GUICtrlCreateButton("Cancel", 50, 80, 100, 30) GUISetBkColor(0xFFFFFF) GUISetFont(12) GUISetState() EndFunc Func _RemoveCommentFromList() $CommentToRemove = GUICtrlRead($CommentList) $Find = _ArraySearch($CurrentComment, $CommentToRemove) $Delete = _ArrayDelete($CurrentComment, $Find) IniDelete(@ScriptDir & "\Test.ini", "Comments") For $i = 1 To $CurrentComment[0][0] - 1 IniWrite(@ScriptDir & "\Test.ini", "Comments", $i, $CurrentComment[$i][1]) Next IniWrite(@ScriptDir & "\Test.ini", "Comments", 1, "") GuiDelete($RemoveCommentGUI) _test() EndFunc ;==>_RemoveCommentFromList Func _Exit() Exit EndFunc While 1 Sleep(10) WEnd And I replied to your reply lol Most recent sig. I made Quick Launcher W/ Profiles Topic Movie Database Topic & Website | LiveStreamer Pro Website | YouTube Stand-Alone Playlist Manager: Topic | Weather Desktop Widget: Topic | Flash Memory Game: Topic | Volume Control With Mouse / iTunes Hotkeys: Topic | Weather program: Topic | Paws & Tales radio drama podcast mini-player: Topic | Quick Math Calculations: Topic
orbs Posted March 5, 2014 Posted March 5, 2014 in Func _RemoveCommentFromList() you have this line near the end: IniWrite(@ScriptDir & "Test.ini", "Comments", 1, "") this clears line #1 in your comments ini file. if this is intentional, then that code works fine for me (superficial testing, removed 2 comments from a 5 comments ini). what issue do you encounter? besides, may i say that you made at-least 2 poor choices in your script: 1) using combobox for multiple selection. for every action, the user must click the combobox arrow, then click the comment, then click the remove button. that's 3 clicks. instead, i'd use listview, so the user can select several comments to remove in one action. 2) using recursion where not needed. in such a small script that may not seem important, but don't make it a habit. in larger operations you'll notice degradation of performance, not to mention much harder code to debug. Signature - my forum contributions: Spoiler UDF: LFN - support for long file names (over 260 characters) InputImpose - impose valid characters in an input control TimeConvert - convert UTC to/from local time and/or reformat the string representation AMF - accept multiple files from Windows Explorer context menu DateDuration - literal description of the difference between given dates Apps: Touch - set the "modified" timestamp of a file to current time Show For Files - tray menu to show/hide files extensions, hidden & system files, and selection checkboxes SPDiff - Single-Pane Text Diff
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