Jump to content

how to check if a GuiCtrlCreateLabel exists?


kor
 Share

Recommended Posts

somewhat strange. I have some labels that I am using in a GUI that will report a value.

I have a button that essentially "clears" all the values and resets the gui back to blank. I am using GUiCtrlDelete($handle)

However if the user presses the "clear" button before they run the program then $handle doesn't exist yet.

Is there a way to somehow check if a gui label exists?

Link to comment
Share on other sites

You could use function IsDeclared to check if the variable has been declared.

My UDFs and Tutorials:

Spoiler

UDFs:
Active Directory (NEW 2022-02-19 - Version 1.6.1.0) - Download - General Help & Support - Example Scripts - Wiki
ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts
OutlookEX (2021-11-16 - Version 1.7.0.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX_GUI (2021-04-13 - Version 1.4.0.0) - Download
Outlook Tools (2019-07-22 - Version 0.6.0.0) - Download - General Help & Support - Wiki
PowerPoint (2021-08-31 - Version 1.5.0.0) - Download - General Help & Support - Example Scripts - Wiki
Task Scheduler (NEW 2022-07-28 - Version 1.6.0.1) - Download - General Help & Support - Wiki

Standard UDFs:
Excel - Example Scripts - Wiki
Word - Wiki

Tutorials:
ADO - Wiki
WebDriver - Wiki

 

Link to comment
Share on other sites

I have found I can do this.. but not sure if it's the correct way

I declare the handle as a global variable at the top

Global $handle

$handle = GuiCtrlCreateLabel("test")

If $handle Then GuiCtrlDelete($handle)

Link to comment
Share on other sites

  • Moderators

kor,

If the ControlID (not handle) of your label is undefined or unused then using GUICtrlDelete on it does not crash AutoIt: :)

#include <GUIConstantsEx.au3>

Global $cLabel

$hGUI = GUICreate("Test", 500, 500)

GUISetState()

Sleep(1000)
MsgBox(0, "Ready?", "Deleting label")
GUICtrlDelete($cLabel)

While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            Exit
    EndSwitch
WEnd

But you must reset the variable to 0 if you delete it or the value remains valid and you might get errors like this: :(

#include <GUIConstantsEx.au3>

; Declare a variable
Global $cLabel

$hGUI = GUICreate("Test", 500, 500)

; Create a label and assing the ControlID to the variable
$cLabel = GUICtrlCreateLabel("Label", 10, 10, 200, 20)

GUISetState()

Sleep(1000)
MsgBox(0, "Ready?", "Deleting label")
GUICtrlDelete($cLabel)

MsgBox(0, "And now:", "Create a new label")
; Note that we do not assign this ControlID to $cLabel
GUICtrlCreateLabel("New label", 10, 100, 200, 20)

MsgBox(0, "Oops", "Look what happens now!")
GUICtrlDelete($cLabel)
; But that the ControlID is reused and so the new label is deleted

While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            Exit
    EndSwitch
WEnd

If you add a $cLabel = 0 line after the first GUICtrlDelete($cLabel) then all will happen as you think it should: ;)

#include <GUIConstantsEx.au3>

; Declare a variable
Global $cLabel

$hGUI = GUICreate("Test", 500, 500)

; Create a label and assing the ControlID to the variable
$cLabel = GUICtrlCreateLabel("Label", 10, 10, 200, 20)

GUISetState()

Sleep(1000)
MsgBox(0, "Ready?", "Deleting label")
GUICtrlDelete($cLabel)
$cLabel = 0 ; Reset the variable to a non-existent control <<<<<<<<<<<<<<<<<<<<<<<<<<<

MsgBox(0, "And now:", "Create a new label")
; Note that we do not assign this ControlID to $cLabel
GUICtrlCreateLabel("New label", 10, 100, 200, 20)

MsgBox(0, "Oops", "Look what happens now!")
GUICtrlDelete($cLabel)
; But that the ControlID is reused and so the new label is deleted

While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            Exit
    EndSwitch
WEnd

All clear? Please ask if not. :)

M23

Public_Domain.png.2d871819fcb9957cf44f4514551a2935.png Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind

Open spoiler to see my UDFs:

Spoiler

ArrayMultiColSort ---- Sort arrays on multiple columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area

 

Link to comment
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...