- Offizieller Beitrag
Hi,
hat schonmal jemand mit AutoIt-Object und dynamischen Properties gearbeitet?
Ich erstelle ein Objekt mit unterschiedlicher Anzahl an Properties. Die Property-Namen werden beim Erstellen übergeben und auch im Objekt als Array hinterlegt.
Wenn ich dann mit dem Objekt arbeite, möchte ich auch in einem Rutsch alle Werte der Properties ändern können. Also Abarbeiten in einer Schleife.
Beim Auslesen kann man das mit Execute hinbiegen - aber wie kann ich das bei Wertzuweisungen erledigen?
Bsp.-Skript
Spoiler anzeigen
#include "AutoitObject.au3"
#include <Array.au3>
_AutoItObject_StartUp()
[/autoit] [autoit][/autoit] [autoit]; Objekt mit Properties erstellen
$o = _Obj('Alpha;Beta;Gamma;Delta')
; Property-Namen anzeigen
$aProps = $o.ArrayProps
_ArrayDisplay($aProps)
; Werte ausgeben (Wert = Index bei Erstellung)
With $o
ConsoleWrite(.Alpha & @CRLF)
ConsoleWrite(.Beta & @CRLF)
ConsoleWrite(.Gamma & @CRLF)
ConsoleWrite(.Delta & @CRLF & @CRLF)
EndWith
; Werte in Schleife ausgeben
For $i = 1 To $aProps[0]
ConsoleWrite(Execute('$o.' & $aProps[$i]) & @CRLF)
Next
; ??? Werte in Schleife zuweisen ???
Global $aNewVal[4] = [10,20,30,40]
For $i = 1 To $aProps[0]
; wie kann ich dynamisch den Property-Namen verwenden?
; so gehts nicht:
Execute('$o.' & $aProps[$i]) = $aNewVal[$i-1] ; ==>> error: Statement cannot be just an expression.
Next
_AutoItObject_Shutdown()
[/autoit] [autoit][/autoit] [autoit]Func _Obj($_sProps)
Local $self = _AutoItObject_Create()
Local $aProps = StringSplit($_sProps, ';')
For $i = 1 To $aProps[0]
_AutoItObject_AddProperty($self, $aProps[$i], $ELSCOPE_PUBLIC, $i)
Next
; Array mit Property-Namen speichern in eigener Property
_AutoItObject_AddProperty($self, 'ArrayProps', $ELSCOPE_PUBLIC, $aProps)
Return $self
EndFunc