in einem kleinen Dialog-Programm soll der Focus beim Aufruf im zweiten XbpSLE stehen, was auch funktioniert. Ich "sammle" alle Dialog-Elemente in einem Array, aEntries. Das Setzen des Focus funktioniert. Danach kommt ein Event-Loop, verbunden mit einer über einen XbpPushButton ausgelösten Aktion. Nach dieser Aktion soll der Focus auf das erste Dialog-Elment in aEntries gesetzt werden, für das noch kein Wert vorliegt:
Code: Alles auswählen
SetAppFocus(aEntries[2])
Code: Alles auswählen
oXbp := XbpPushButton():new(oDlg, oDlg, aPos, aSize)
oXbp:caption := "Browse Files"
oXbp:tabStop := .T.
oXbp:activate := {|uNIL1, uNIL2, self| SearchCoverImage(aEntries, self)}
oXbp:create()
AAdd(aEntries, oXbp)
Code: Alles auswählen
STATIC FUNCTION SearchCoverImage(aEntries, oButton)
Local cOldDrive, cOldDir, cNewFile, cMask, cType
Local nUpdPos, nLen, nI
Local oFD
nLen := Len(aEntries)
FOR nI := 1 TO nLen
IF aEntries[nI] == oButton
nUpdPos := nI - 1
EXIT
ENDIF
NEXT
IF nUpdPos == NIL
ConfirmBox(, "Could not locate SLE to place image location", "Error", XBPMB_OK, XBPMB_INFORMATION)
RETU(.F.)
ENDIF
cOldDir := CurDir()
cOldDrive := CurDrive()
IF Left(cOldDir, 1) <> "\"
cOldDir := "\" + cOldDir
ENDIF
cMask := "*.jpg"
oFD := XbpFileDialog():new(SetAppWindow(), SetAppWindow())
oFD:create()
cNewFile := oFD:open(cMask)
CurDrive(cOldDrive)
CurDir(cOldDir)
IF !Empty(cNewFile)
aEntries[nUpdPos]:setData(cNewFile)
nLen := Len(aEntries)
FOR nI := 1 TO nLen
cType := aEntries[nI]:className()
IF cType <> "XbpPushButton"
IF Empty(aEntries[nI]:getData())
// ConfirmBox(, "Setting focus to " + cType + " " + Str(nI), "Information", XBPMB_INFORMATION, XBPMB_OK)
SetAppFocus(aEntries[nI])
EXIT
ENDIF
ENDIF
NEXT
ENDIF
RETURN (.T.)
Die Abfrage auf den Typ erfolgt, da XbpPushButton keine :getData() Methode besitzt.
Die (derzeit kommentierte) ConfirmBox() hat mir im Test bestätigt, dass der SetAppFocus() z.B. auf das zweite Dialog-Element erfolgt. Danach steht der Focus aber immer noch auf dem XbpPushButton, der diese Funktion aufgerufen hat, und nicht auf dem Dialog-Element, das in SetAppFocus() angegeben wurde.
Was übersehe ich hier?