Antonio, con este código en tget, metodo Keychar ya funciona el salto con en enter en combobox, estilo CBS_DROPDOWN
Code: Select all
case nKey == VK_TAB .or. nKey == VK_RETURN
if ::bChange != nil .and. ( ::oGet:Changed .or. ::oGet:UnTransform() != ::oGet:Original )
lAccept = Eval( ::bChange, nKey, nFlags, Self )
if ValType( lAccept ) == "L"
if lAccept
//aca no se si es necesario el evaluar si ::oWnd:IsKindOf( "TCOMBOBOX" ) como el la ultima parte del codigo
::oWnd:GoNextCtrl( ::hWnd )
endif
else
//aca no se si es necesario el evaluar si ::oWnd:IsKindOf( "TCOMBOBOX" ) como el la ultima parte del codigo
::oWnd:GoNextCtrl( ::hWnd )
endif
else
if ::oWnd:IsKindOf( "TCOMBOBOX" ) //kds - modificado para permitir salto de control con ENTER cuando el get portenece a un combobox
::oWnd:oWnd:GoNextCtrl( ::hWnd )
else
::oWnd:GoNextCtrl( ::hWnd )
endif
endif
este es el programa de prueba
Code: Select all
// DropDown ComboBoxes
#include "FiveWin.ch"
function Main()
local oDlg, oCbx1, oCbx2
local cText1 := " "
local cText2 := " "
local oVar, cVar := space(20)
DEFINE DIALOG oDlg FROM 10, 10 TO 20, 50 ;
TITLE "DropDown ComboBox Test"
@ 0.5, 1 COMBOBOX oCbx1 VAR cText1 STYLE CBS_DROPDOWN ;
ITEMS { "One", "Two", "Three" } ;
VALID ( Msginfo(1), .t. )
@ 2.0, 1 GET oVar VAR cVar PICTURE "@!"
@ 3.5, 1 COMBOBOX oCbx2 VAR cText2 STYLE CBS_DROPDOWNLIST ;
ITEMS { "One", "Two", "Three" } ;
VALID ( Msginfo(2), .t. )
ACTIVATE DIALOG oDlg CENTERED
return nil
ahora, tengo una duda:
en la clase combobox, método KeyChar, esta este código que no veo que se ejecute nunca, dado que la tecla Enter se evalúa en el método KeyDown
Code: Select all
if nKey == VK_RETURN
return ::oWnd:GoNextCtrl( ::hWnd )
endif
ademas, la clase combobox no esta evaluando el valid, cuando el tipo es CBS_DROPDOWN, ahi no he podido hallar el problema, si me das una guia,
cabe señalar que el valid si funciona si el tipo es CBS_DROPDOWNLIST. por lo que me inmagino que la data ::bValid deberia ser pasada al objeto tget, para que lo evaluara,
tambien habria que revisar el bWhen y bChange.
ademas otra pregunta, antes hace años la clase tcombobox creaba el objeto tget solo si el combobox era CBS_DROPDOWN, ahora lo crea siempre, por que?