- Garmin topik
- Itt a Galaxy S26 széria: az Ultra fejlődött, a másik kettő alig
- Honor 200 - kétszázért pont jó lenne
- Yettel topik
- iPhone topik
- Megérkezett a Huawei eddigi legkomolyabb futóórája
- Android alkalmazások - szoftver kibeszélő topik
- Apple iPhone 16 - ígéretek földje
- Xiaomi 14T - nem baj, hogy nem Pro
- Samsung Galaxy S24 Ultra - ha működik, ne változtass!
Ú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
- Garmin topik
- Túlélnél egy generációs űrhajón? MIO: Memories in Orbit teszt
- Nintendo Switch 2
- Azonnali VGA-s kérdések órája
- Itt a Galaxy S26 széria: az Ultra fejlődött, a másik kettő alig
- Projektor topic
- Honor 200 - kétszázért pont jó lenne
- Filmgyűjtés
- Jövedelem
- Wise (ex-TransferWise)
- További aktív témák...
- Apple Magic Mouse 2 A1657 Doboz + gyári kábel
- Gamer PC / Intel i7 9700 / RX 6600 8GB / 16GB DDR4 / 500GB SSD /
- Latitude 7440 27% 14" QHD+ IPS érintő i5-1345U 32GB 512GB NVMe magyar vbille ujjlolv IR kam gar
- HIBÁTLAN iPhone 17 Pro Max 256GB Deep Blue-1 ÉV GARANCIA - Kártyafüggetlen, 100% Akksi
- 48 " LG OLED AI B5 4K Smart TV garanciával
- BASEUS Compact Quick Charger 2xUSB USB-C PD 3A 30W fekete
- Samsung Galaxy Book 3 Amoled 360 i5 13.gen, 16GB RAM, 512GB SSD, érintőkijelzős kedvező áron!
- HIBÁTLAN iPhone 13 Pro 256GB Sierra Blue-1 ÉV GARANCIA - Kártyafüggetlen, MS4530, 100% Akkumulátor
- Készpénzes / Utalásos Számítógép felvásárlás! Személyesen vagy Postával!
- Intel Processzorok sok db : Xeon E5-1620V3 // Pentium G4400T // i3 6100, 6100T, 4130, 2140T
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest

