Přenášení proměnných mezi Formy.VB6   otázka

VB6/VBA

Dobrý den,zase píšu s lamáckým dotazem,jde o to jestli je možné přenášet proměnnou do jiných Formů.Zkoušel jsem Dim i Static a ani jedno mi ji nepřeneslo.Proto se prosím ptám dá se proměnná(i její hodnota) nějak přenášet do jiného Formu?Odpověď bude rozhodující pokud to půjde,budu v mém vývoji projektu pokračovat a když ne,skončím s mým projektem,děkuji.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Pokud je proměnná deklarována v modulu jako Public, je přístupná v celém projektu (ve všech frmech, modulech apod.)

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Děkuji,teď mám problém,že při přechodu do jiného Formu přičtu k proměnné 1,v dalším Formu ji zobrazuji v Label1.Caption nebo v Text1.Text a tam je hodnota vždy 0,přitom je hodnota 1 a hodnotu 1 to píše ale pouze v MsgBox.:-(

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Prosím poraďte mi,budu Vám vděčný nevím ale proč to nefunguje..

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět

Problém by možná mohl být v tom, jestli na tom dalším formu nemáte deklarovanou proměnnou stejného jména pomocí Dim nebo Private - potom používá tuto "místní" proměnnou, která "má přednost" před globální proměnnou.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Děkuji moc za odpověď,bohužel proměnnou v jiném Formu deklarovanou nemám.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Pokud si pamatuji tak ve vb6 to nebyl problém tam stačilo napsat - např. přenos txtBoxu z formuA do formu B následující= frmB.txtBox.text = frmA.txtBox.text - to se dalo napsot do formLoad formuláře B a fungovalo to

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Děkuji,bohužel nefunguje zapsal jsem to takto do Form Load:

room1.lbody.Caption = room2.Label1.Caption
room1.lbody2.Caption = room2.Label2.Caption

Přičemž lbody a lbody2 jsou labely kde se zobrazují proměnné body a maxbody.

Teď to vypisuje v Labelu 1-Label1

v Labelu 2-Label2

nahlásit spamnahlásit spam 0 odpovědětodpovědět

V primarnim formu musi hodnoty existovat a v druhem otviranem z toho prvniho se daji načist tak jak je uvedeno dokonce jdou při uzavření druhého formu nastavit hodnoty v prvním, určitě to jde

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Přesně tak to mám,nevím proč to nejde pokud by jste byl ochoten,poslal bych příklad jako zdrojový kód.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

nechybi ti tam nahodou pojmenování formů

frmB.room1.lbody.Caption = frmA.room2.Label1.Caption
frmB.room1.lbody2.Caption = frmA.room2.Label2.Caption

b je ten oteviraný z a

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Myslím,že ne,room1 a room2,tak se u mě jmenují Formy...

nahlásit spamnahlásit spam 0 odpovědětodpovědět

to máš dobře, to ti asi funguje přesně jak má. Problém je ten, že v době kdy ty hodnoty přenášíš máš v room2.Label1.Caption hodnotu Label1 (výchozí caption pro nově přidaný label) a v room2.Label2.Caption máš hodnotu Label2.

Nebo ti to "pod rukama" zase mění ještě jiná procedura nebo funkce.

Obecně pro hodnoty používané "napříč" aplikací, je nejlepší použít nějaké globálně dostupné proměnné.

Public Body as Long
Public MaximalniBody as Long

A potom používat funkce které s těmi body mají nějak pracovat...

Private Function PripocitejBodyZaZasah (Byval ZasazenyObjekt as String, ByRef AktualniPocetBodu as Long) As Boolean

     Dim temp_Body As Long
     Select Case UCASE(ZasazenyObjekt)
     Case "SLON": temp_Body = 10
     Case "VLK": temp_Body = 20
     Case "KACENA": temp_Body = 30
     Case "PUMA": temp_Body = 50
     Case "ZAJIC": temp_Body = 100
     Case "SERIF": temp_Body = 200
     Case "POMOCNIK": temp_Body = -100
     Case Else 'nelze najit zasazeny objekt...
               'proto fuknci predcasne ukoncime a nahlasime neuspech
           Return False
     End Select

     AktualniPocetBodu = AktualniPocetBodu + temp_Body

     Return True

End Function


'Volani takove funkce pak vypada takto:

Body = 10
Debug.Print Body 'vypise 10
Dim vysledek as Boolean
'Zavolame funkci PripocitejBodyZaZasah, te predame promennou
'Body vcetne jejiho obsahu. Pri opousteni teto funkce, bude
'hodnota z vnitrni promenne AktualniPocetBodu funkce 'PripocitejBodyZaZasah ulozena zpet do promenne Body.
'Po dokoknceni prepocitavani se tudiz hodnota promenne Body zmeni.
'Za to muze slovicko ByRef misto ByVal v deklaraci funkce PripocitejBodyZaZasah.
Vysledek = PripocitejBodyZaZasah("zajic",Body)
If Vysledek = False Then 
     Debug.Print "Zasazeny cil nelze zjistit"
Else
     Debug.Print Body 'Vypise 110
End If

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback