kandilzade yazdı:Yanıtlar için teşekkürler.
Sorunuma en uyan çözüm activecontrol property'si gibi.
thisform.activecontrol'ü bir değişkene atayıp daha sonra işlem bitince bu kontrole setfocus yaptırmak en uygun çözüm gibi. Ancak bu da çok kolay değil. Çünkü thisform.activecontrol yalnızca kontrolün adını veriyor. Bana tam adı gerek yani Thisform'dan başlayarak.
Çözüm kolay görünmüyor. Formdaki her kontrolün (yaklaşık 40 adet!, 2 pageframe ve birçok textbox ve editbox var) onun yerine her kontrolün lostfocus eventine o kontrolün tam adını (Thisform.Pageframe1.Makro.Edit_makro gibi) bir değişkene atamak. Sonra da foküsü oraya yönlendirmek.
@uğurlu, verdiğiniz linkteki sorun formun foküs kaybetmesi bende ise aynı formdaki kontroller arasında foküs sorunu var. Yine de denedim olmadı.
teşekkür ederim.
thisform.activecontrol ismini vermiyor, objenin kendisini veriyor. Sen tam olarak ismini saklamak istersen:
Visual Fox Pro
lcName = stuff( sys(1272, thisform.ActiveControl), 1, len( thisform.Name ), 'thisform' )
Simdi senin orijinal soruna bakarsak, her kontrolun Lostfocus kodunun calismasina gerek yok. ActiveControl disindakilerin Lostfocus kodu zaten calisti (hic focus olmadiysa calismadi ama sanirim o kadar da bagimli kod yazmamissindir). Calismasi gereken sadece activecontrol icin. O zaman soyle olabilir kod:
Visual Fox Pro
local loControl
loControl = thisform.ActiveControl
loControl.LostFocus()
* Keypress kodu
loControl.SetFocus()
Eger gercekten bir grup kontrole birseyler yaptirmak istiyorsan, o zaman bunun icin FoxyClasses'ta hazir kod var. FoxyClasses'i:
http://www.medikosoft.com/cetin/FoxyClasses.zip
adresine giderek indirebilirsin. udfObjCollector classina bak ve onun ornegini incele. Istersen form seviyesinde, istersen daha alt seviyedeki (thisform.pageframe, thisform.container1 ... gibi) , istedigin kontrollerde bir metodu cagirabiliyorsun ( metodlar icin SetAll diye dusun ).
Bir baska yontem benim "yayin" ya da "anons" yontemi dedigim yontem. Bunu uygulayabilmek icin sana "cevap vermesini" istedigin tum nesnelerin belli bir propertysi oluyor ve bu propertynin _Assign metodu kullaniliyor. Soyle:
Visual Fox Pro
define class myTextBox as Textbox
AnonsDinle = .F.
procedure AnonsDinle_Assign
lparameters vNewVal
do case
case m.vNewVal = 'VeriKontrol'
* birseyler yap
case m.vNewVal = 'Reset'
* baska birsey yap
otherwise
endcase
endif
endproc
enddefine
Temel olarak tum classlarinda bu oluyor. O zaman senin tum yapman gereken:
Visual Fox Pro
thisform.SetAll( 'AnonsDinle', 'VeriKontrol' )
gibi kodlarla her kontrolun, kendi kendine ilgili islemi yapmasini saglamak (bu islem kendisinin Lostfocusunu cagirmak da olabilirdi).