Avatar billede japlex Nybegynder
16. december 2005 - 15:38 Der er 12 kommentarer og
1 løsning

Hvordan kan jeg kalde ind i en MDI child form fra en anden MDI

Jeg har 3 vb forms:

1 MDI parent form kaldet frmMDI
1 MDI child form kaldet frmMain
1 MDI child form kaldet frmManageProject

Hvordan kan jeg fra frmManageProject (som der aldrig loades mere end én instans af) kalde ind i en vilkårlig instans af frmMain.

Jeg kan jo ikke kalde en procedure direkte som f.eks.

frmMain.subMinProcedure

Jeg har helt konkret brug for at kunne styre indholdet af caption på alle mine instanser af frmMain fra frmManageProjects.
Avatar billede sjh Nybegynder
16. december 2005 - 15:57 #1
Her kan du se hvordan du kan styre den Form som er active. (ActiveForm)
http://vbhansen.dk/spm/444171/MDILabel.zip
Avatar billede japlex Nybegynder
16. december 2005 - 16:31 #2
Det er ikke nødvendigvis den seneste aktive mdi child form jeg skal styre.

Husk på min beskrivelse:

1 MDI parent form kaldet frmMDI
1 MDI child form kaldet frmMain
1 MDI child form kaldet frmManageProject

Jeg skal fra frmManageProject som er child, styre caption på alle instanser af frmMain (som også er child).

Jeg har i frmManageProject et listview med en række projekter der kan åbnes. Når jeg åbner et project instantieres en ny frmMain.

Lad os forestille sig at jeg har 10 projekter i mit listview foraf jeg har 3 åbne. Jeg har altså 3 instanser af frmMain. Fra en kolonne i listviewet kan jeg ændre navnene på projekterne. Disse skal fremgå i caption på alle frmMain instanserne. Så jeg ønsker på listview controllens AfterLabelEdit event at opdatere caption på alle instanserne af frmMain.

Håber dette hjælper til forståelsen
Avatar billede sjh Nybegynder
16. december 2005 - 16:43 #3
ok. så må du gennemløbe dem..


Private Sub Command1_Click()
Dim objForm As Form
Dim strFormname As String

  strFormname = LCase$("frmMain") ' (frmMain/child)
  ' Gennemløber alle forms
  For Each objForm In Forms
    ' Tjekker om Form navn er strFormname (frmMain/child)
    If LCase$(objForm.Name) = strFormname Then
      ' Her kan du så gøre hvad du ønsker.
      MsgBox "Caption = " & objForm.Caption
      ' Her kan du så gøre hvad du ønsker.
    End If
  Next
End Sub
Avatar billede japlex Nybegynder
16. december 2005 - 16:44 #4
Lad mig formulere det sidste lidt bedre.

Lad os forestille sig os jeg har 10 projekter i min listview control, foraf jeg har 3 åbne. Jeg har altså 3 instanser af frmMain. Fra en kolonne i listview controllen kan jeg ændre navnene på projekterne. Disse skal fremgå i caption på alle frmMain instanserne. Så jeg ønsker på listview controllens AfterLabelEdit event at opdatere caption på netop den instans of frmMain der indeholder det projekt der får nyt navn.
Avatar billede sjh Nybegynder
16. december 2005 - 16:49 #5
den kode her : http://exp.dk/spm/672722#rid5978312 kan ændre navn eller hvad du nu ønsker.. (objForm.Caption = "NYTNAVN")
Avatar billede sjh Nybegynder
16. december 2005 - 16:53 #6
Du skal selfølige køre koden under AfterLabelEdit event for at opdatere..
Avatar billede japlex Nybegynder
16. december 2005 - 20:48 #7
ok, nu kommer vi nærmere.

For at jeg nu kan sikre mig at jeg får matched det rigtige project med den rigtige instans af en form, havde jeg tænkt mig at bruge et felt i mit listview der består af en GUID. Denne GUID bliver læst in i en for frmMain instansen lokal variabel GUID_frmMain. Dvs at den række i listviewet for hvilken AfterLabelEdit eventen fyrer har en GUID der skal matche med den GUID der ligger i GUID_frmMain instansen

Jeg har altså brug for at kunne tilgå GUID_frmMain variablen fra min AfterLabelEvent!

Kan det lade sig gøre. Findes der noget som en slags indirekte reference til variablen - noget a la - !strFormname.GUID_frmMain ???
Avatar billede japlex Nybegynder
16. december 2005 - 22:02 #8
Ok - nu virker det efter hensigten - tak for hjælpen
Avatar billede japlex Nybegynder
16. december 2005 - 22:04 #9
sjh - læg lige et svar og så skal du få pointene som tak for indsatsen
Avatar billede japlex Nybegynder
16. december 2005 - 22:06 #10
jeg brugte din kode og løb gennem form objecterne, - tilgik så GUID'en vha. objForm.GUID_frmMain - Der efter var det ikke svært at matche den med den i listviewet valgte GUID.
Avatar billede sjh Nybegynder
16. december 2005 - 22:20 #11
du kan bruge .Tag som dit unike id.. så kan du altid finde din form ved at gennemløbe dem alle.. fx.

  For Each objForm In Forms
    If objForm.Tag = "Dit unikke id" Then
      Exit For
    End If
  Next
Avatar billede japlex Nybegynder
16. december 2005 - 23:15 #12
.Tag er helt sikkert bedre - sparer mange linjer kode

Tak igen - afgiv nu det svar!!
Avatar billede sjh Nybegynder
17. december 2005 - 01:47 #13
når ja ;)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester