/ Forside / Teknologi / Udvikling / VB/Basic / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
VB/Basic
#NavnPoint
berpox 2425
pete 1435
CADmageren 1251
gibson 1230
Phylock 887
gandalf 836
AntonV 790
strarup 750
Benjamin... 700
10  tom.kise 610
Reference til bestemt Form [VB6]
Fra : Jens Vestergaard


Dato : 30-01-02 23:22

Hvordan sætter jeg en object variable til en form, hvis navn jeg kender i en
String variabel...?

Jeg har en form med navnet frmMD. Jeg vil grne have variablen f til at
referere til frmMD.

Set f = frmMD fungerer fint... MEN:
Det foregår i en procedure, hvor "MD" ligger i en variabel (sVar), som kan
have en af mange værdier.

Derfor vil jeg gerne kunne skrive f.eks.:
Set f = Forms("frm" & sVar)
men derved får jeg en Type mismatch, hvilket naturligvis er fordi der
forventes et Index (Integer) i Forms Collection. I andre Collections kan man
imidlertid godt referere til en Key (String) - men altså ikke i Forms? Oder?

En workaround er naturligvis:
For Each f In Forms
If f.Name = "frm" & sVar Then
Exit For
End If
Next

.... men det virker lidt tumpet. Andre forslag?

--
mvh
Jens Vestergaard
www.railsoft.dk



 
 
Carsten Suurland (31-01-2002)
Kommentar
Fra : Carsten Suurland


Dato : 31-01-02 00:12

Hej Jens

Det virker som en noget "utraditionel" måde at referere til en form på...
Kan du prøve at beskrive nærmere hvad formålet med din reference er, og
hvorfor du via en Form variabel gerne vil kunne referere til flere
forskellige forms?

/Carsten Suurland



Jens Vestergaard (31-01-2002)
Kommentar
Fra : Jens Vestergaard


Dato : 31-01-02 08:46

"Carsten Suurland" <carsten@suurland.dk> skrev i en meddelelse
news:k5%58.3554$m6.327343@news000.worldonline.dk...
> Hej Jens
>
> Kan du prøve at beskrive nærmere hvad formålet med din reference er, og
> hvorfor du via en Form variabel gerne vil kunne referere til flere
> forskellige forms?

Tjae, bum, bum...
Forklaringen kan godt gå hen og blive lidt lang, men...you asked for it!

Min app kører med fire synlige forme på fire monitorer. I baggrunden kører
op til 5-7 andre loadede, men ikke synlige forme. På hver af de fire
monitorer kan enhver af de loadede forme bringes frem.

På hver form/monitor kan der indgives kommandoer, der referer til objekter
på formen.
'Gør noget med objekt A'
....men da A måske findes på alle formene, skal den funktion på modul-niveau,
der behandler kommandoen, vide fra hvilken form, kommandoen er sendt.
Det er i sig selv ikke noget problem, eftersom kommando-objektet bare sender
referencen 'Me' med i kommandoen.

Men rundt omkring i app'en findes funktioner, som sender automatiserede
kommandoer, der skal 'se ud' som om de kommer fra en bestemt form.

Disse funktioner kender objektnavn og navnet på den form, objektet findes
på, men skal altså skabe en reference til formen, som kan sendes som
argument til kommando-fortolkeren - eller kommando-fortolkeren skal selv
skabe en form-reference udfra objektnavn og formnavn. Hvor det sker, er jo i
denne sammenhæng ligegyldige.

En direkte indtastet kommando kunne se ud som 'H MD A B', hvor
H = Den handling, der skal udføres
MD = formens navn
A = objekt-navn
B = objekt-navn
Når den sendes fra 'sin egen form', medsendes som nævnt referencen 'Me' (no
problemos), men hvis den automat-sendes fra et andet sted i app'en, skal
form-referencen skabes udfra kommando-delen MD.

Jeg bebrejder ikke nogen, hvis det ikke er umiddelbart gennemskueligt - men
mine forklaringsevner rækker ikke længere (Jeg er oprindeligt
journalist...måske derfor!)



--
mvh
Jens Vestergaard
www.railsoft.dk




>
> /Carsten Suurland
>
>



Carsten Suurland (31-01-2002)
Kommentar
Fra : Carsten Suurland


Dato : 31-01-02 09:16

Hej Jens

Forklarngen er fin!
En mulig løsning for dig, vil være at lave an collection hvori de opretter
de usynlige forms.
Denne collection skal du have adgang til i hele projektet.

F.eks.:
Sub Form_Load()
AddFormRef Me, "MD"
End Sub

Sub Form_Unload()
RemoveFormRef "MD"
End Sub

På den måde kan du referere direkte til den enkelte form i dine
procedurer...

'* I et modul *
Private mvarFormsCollection As Collection

Public Sub AddFormRef(ByRef Form As Form, ByVal FormSuffix As String)
mvarFormsCollection.Add Form, FormSuffix
End Sub

Public Sub RemoveFormRef(ByVal FormSuffix As String)
mvarFormsCollection.Remove FormSuffix
End Sub

Public Property Get FormRef(ByVal FormSuffix As String) As Form
Set FormRef = FormsCollection(FormSuffix)
End Function

/Carsten Suurland




Jens Vestergaard (31-01-2002)
Kommentar
Fra : Jens Vestergaard


Dato : 31-01-02 10:08

"Carsten Suurland" <carsten@suurland.dk> skrev i en meddelelse
news:y3768.4437$m6.339234@news000.worldonline.dk...

> Forklarngen er fin!
> En mulig løsning for dig, vil være at lave an collection hvori de opretter
> de usynlige forms.
> Denne collection skal du have adgang til i hele projektet.

[SNIP kode]

Hej Carsten,

Tak for input.

Jeg kan sagtens følge dig, men det forekommer mig altså fortsat 'tumpet'
(man er vel jyde!) at lave en forms-collection selv, når der findes en
indbygget forms-collection!

Jeg har allerede lavet en funktion, der pakker min anden tumpede workaround
ind:

Public Function GetFormRef(sFormNavn As String) as Form
For Each GetFormRef In Forms
If GetFormRef.Name = sFormNavn Then Exit For
Next
'plus lidt error handeling
....
End Function

Hvorefter:
Set f = GetFormRef("frm" & sVar)
virker fint.

Jeg ville bare sikre mig, at der ikke var en anden tilgang til den
indbyggede Forms-collection, som jeg ikke var opmærkom på...

--
mvh
Jens Vestergaard
www.railsoft.dk




Søg
Reklame
Statistik
Spørgsmål : 177557
Tips : 31968
Nyheder : 719565
Indlæg : 6408885
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste