- iPhone topik
- Samsung Galaxy S24 Ultra - ha működik, ne változtass!
- Mobil flották
- Xiaomi 17 Ultra - jó az optikája
- Itt a Galaxy S26 széria: az Ultra fejlődött, a másik kettő alig
- Samsung Galaxy A54 - türelemjáték
- Vivo X300 Pro – messzebbre lát, mint ameddig bírja
- Európába tart a Xiaomi Watch 5, eSIM-es verzió is jöhet
- Kezünkben a OnePlus 15 és az Oppo Find X9-ek
- Apple iPhone 17 Pro Max – fennsík
Új hozzászólás Aktív témák
-
ArchElf
addikt
válasz
Cpt. Flint
#1501
üzenetére
Pedig jó volna ha megértenéd a változók hatókörét. Nem tudom milyen fejlesztési tapasztalatod lehet, de ez a VB-re nem nagyon terjed ki.
Anélkül elég nehezen tudom elmagyarázni azt, amit látsz (és nem éresz meg). De röviden azért megpróbálom:
- Ha egy függvény definíciójában van definiálva egy változó (vastaggal)
Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
azt hiába definiálod előre, az adott függvényben az itt definiált "változat" fog élni.
- Ha definiálsz egy változót egy függvényben, attól még az onnan meghívott függvényekben a változó nem létezik. A változó hatóköre csak a definiálás helyére érvényes (kivétel a kód "gyökerében" globálisan definiált változók, de azok a függvényekben felüldefiniálhatók - pl. mint paraméter)
- Használd az Option Explicit parancsot (kód legelején), hogy lásd, hogy minden változód helyesen van definiálva (és nem írtál el sehol semmit). Ez az utasítás kikényszeríti a változók definiálását.Az ActiveControl az aktuális konténerben aktív kontrolt kéri le. Arra meg kell nézned, hogy Container típusú-e és vannak-e tagjai, ha iden abban is meg kell nézni, hogy van-e aktív komponens -rekurzívan el lehet jutni az utolsó tagig, ami jelen esetben a TextBox1 komponens. De a KeyCode-ot és Shift-et nem lehet nem átadni. (Ha pedig odaírod, hogy ByVal - azaz érték és nem referencia szerinti átadás van -, akkor átkonvertálja neked az MSForms.ReturnInteger-t mezei Integer-ré)
Option Explicit
Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
csakszam KeyCode, Shift
End Sub
Sub csakszam(ByVal KeyCode As Integer, ByVal Shift As Integer)
Dim Vezerlo As Control
Set Vezerlo = GetActive(ActiveControl)
'MsgBox TypeName(GetActive(ActiveControl))
If TypeName(Vezerlo) <> "TextBox" Then
Exit Sub
End If
If Shift <> 0 Then
Vezerlo.Locked = True
Else
If KeyCode = 8 Or KeyCode = 46 Or _
(KeyCode >= 48 And KeyCode <= 57) _
Or (KeyCode >= 96 And KeyCode <= 105) Then
Vezerlo.Locked = False
Else
Vezerlo.Locked = True
End If
End If
End Sub
Private Function GetActive(con As Control) As Control
If TypeName(con) = "UserForm" Then
Dim f As UserForm
Set f = con
Set GetActive = GetActive(f.ActiveControl)
ElseIf TypeName(con) = "MultiPage" Then
Dim mp As MultiPage
Set mp = con
Set GetActive = GetActive(mp.SelectedItem)
ElseIf TypeName(con) = "Page" Then
Dim pg As Page
Set pg = con
Set GetActive = GetActive(pg.ActiveControl)
ElseIf TypeName(con) = "Frame" Then
Dim fr As Frame
Set fr = con
Set GetActive = GetActive(fr.ActiveControl)
Else
Set GetActive = con
End If
End FunctionAE
Új hozzászólás Aktív témák
- Gaming notebook topik
- iPhone topik
- GeForce RTX 5060: Ezt kapjuk 150 ezerért
- Milyen nyomtatót vegyek?
- OLED monitor topic
- ldave: New Game Blitz - 2026
- Kormányok / autós szimulátorok topikja
- Spórolós topik
- NVIDIA GeForce RTX 5070 / 5070 Ti (GB205 / 203)
- Oldman2: A KOReader ebook olvasó program
- További aktív témák...
- DELL Precision 7550 ntel Core I7-10750H, 64 GB, 1TB SSD MAGYAR VILÁGITÓS BILL
- Lenovo Thinkpad T14 GEN5 Ultra7 165U, 1 tb, 32gb ram, MAGYAR VILÁGÍTÓ BILLENTYŰZET GARIS
- Új MSI 15 Katana FHD IPS 144Hz i7-13620H 10mag 16GB DDR5 1TB SSD Nvidia RTX 4060 8GB Win11 Garancia
- Eladó garanciális Synology DS223j NAS
- Dell Precision 5530 15,6" UHD touch, i7 8850H, 16GB RAM, 4GB VGA, 512GB SSD, jó akku, számla, gar
- Dell Precision 7550 i7-10850H 32GB 512GB Nvidia RTX3000 6GB 1 év garancia
- BESZÁMÍTÁS! MSI MAG B365M i5 9600KF 16GB DDR4 512GB SSD RTX 2060 6GB Kolink Stronghold Seasonic 550W
- HIBÁTLAN iPhone 15 128GB Pink-1 ÉV GARANCIA - Kártyafüggetlen, MS4443
- Beszámítás! Asus ROG Strix Scar Edition G533Z notebook-i7 12700H 16GB DDR5 1TB SSD RTX 3060 6GB W11
- DELL Alienware 16X Aurora Intel Core Ultra 7 / RTX 5060 Csillagközi indigó 2029-ig garancia
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest

