- Magisk
- Apple Watch
- Drága bluetooth tagek olcsóbb alternatívái (MiLi MiTag, LiTag, OTAG, stb.)
- Megjött a jubileumi Pixel széria
- Azonnali mobilos kérdések órája
- Android alkalmazások - szoftver kibeszélő topik
- Ennyibe kerülhet a Xiaomi Watch S4 európai változata
- Samsung Galaxy S25 - végre van kicsi!
- Google Pixel topik
- Motorola Edge 50 Neo - az egyensúly gyengesége
Ú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
- Linux kezdőknek
- Az Xbox égisze alatt oldaná meg a PC-s játékosok legnagyobb gondját a Microsoft
- eBay-es kütyük kis pénzért
- Counter-Strike: Global Offensive (CS:GO) / Counter-Strike 2 (CS2)
- exHWSW - Értünk mindenhez IS
- sh4d0w: Netflix? Ugyan, VW előfizetés!
- Villanyszerelés
- Autóápolás, karbantartás, fényezés
- Gamescom 2025: Jubileumi csúcs-VGA-t villantott az ASUS
- Nintendo Switch 2
- További aktív témák...
- X1 Carbon 10th 14" 3K OLED i7-1260P 16GB 512GB NVMe ujjlolv IR kam gar
- Eladó komplett PC Ryzen 9 5900x RTX3080
- Latitude 5530 15.6" FHD IPS i5-1235U 16GB 256GB NVMe ujjolv IR kam gar
- Inspiron 5441 14" FHD+ IPS Snapdragon X Plus 16GB 512GB ujjlolv IR kam gar
- Dell Precision 5570 15,6" FHD+,i7-12700H,64GB DDR5,4TB NVME,RTX A1000 4GB Munkaállomás,gyári gari
- HIBÁTLAN iPhone 13 Pro 128GB Alpine Green -1 ÉV GARANCIA - Kártyafüggetlen, MS2978
- Acer TravelMate P214 i3-1115G4 8GB 256GB 14" FHD 1év garancia
- ÁRGARANCIA!Épített KomPhone i5 13400F 16/32/64GB RAM RTX 5060 Ti 8GB GAMER PC termékbeszámítással
- LG 27GP95RP - 27" Nano IPS - UHD 4K - 160Hz 1ms - NVIDIA G-Sync - FreeSync Premium PRO - HDR 600
- Bomba ár! Lenovo ThinkPad T460 - i5-6GEN I 8GB I 256GB SSD I 14" FHD I Cam I W10 I Garancia!
Állásajánlatok
Cég: FOTC
Város: Budapest