Hirdetés
- Sok pénz mellett az NVLink Fusiont is felkarolja a Marvell
- Mit rejt a telefonod? – A tranzisztorok elképesztő világa
- Fogyókúrával kínálnak több tányért a Toshiba új merevlemezei
- Kicsit visszafogottabban nyávog az Intel Wildcat Lake
- Gyorsabb processzort igen, memóriát alig kapott a Xiaomi új HD tévéokosítója
- Windows 11: miért nem vált mindenki?
- Mit rejt a telefonod? – A tranzisztorok elképesztő világa
- Milyen CPU léghűtést vegyek?
- Kormányok / autós szimulátorok topikja
- Apple MacBook
- Állandó tisztaság a be quiet! Dark Sweeper tápegységgel
- Még több képet generál és shadert is előfordít az új NVIDIA App
- NVIDIA GeForce RTX 5080 / 5090 (GB203 / 202)
- Melyik tápegységet vegyem?
- Fejhallgató erősítő és DAC topik
Ú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
- S.T.A.L.K.E.R.: Call of Pripyat
- Le Mans Ultimate
- Witcher topik
- Óvodások homokozója
- Samsung Galaxy S26 Ultra - fontossági sorrend
- gban: Ingyen kellene, de tegnapra
- Motorolaj, hajtóműolaj, hűtőfolyadék, adalékok és szűrők topikja
- Filmvilág
- Autós topik
- Windows 11: miért nem vált mindenki?
- További aktív témák...
- Eladó Intel Core i7-14700KF kifogástalan állapot, GARANCIA 2027.06.07
- Eladó G pro superlight 2 se Unusual way sports UHWM skate talpakkal.
- Fehér konfig - i7-4790k/ROG Strix GTX 1070/Wifi/Rengeteg új-dobozos alkatrész/AJÁNDÉK Resident Evil
- 3D 4K Oled Dolby Vision (LGOLED C6EP/LGOLED E6P/LG OLEDG6P)
- 3D 4K Oled Dolby Vision (LGOLED C6EP/LGOLED E6P/LG OLEDG6P)
- Game Pass Ultimate előfizetés azonnal, problémamentesen, méghozzá OLCSÓN! Immáron 8 éve!
- iPhone 13 mini 128GB Green -1 ÉV GARANCIA -Kártyafüggetlen, MS3896, 95% Akkumulátor
- Samsung Galaxy A56 5G Awesome Graphite 128GB használt karcmentes 6 hónap garancia
- REFURBISHED - DELL Thunderbolt Dock WD19TB (210-ARJD), WD19TBS (210-AZBV)
- Akció! Acer Nitro 5 AN515-55! I7 10750H / RTX 3050Ti / 16GB DDR4 / 512GB Nvme SSD!
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest

