30. september 2002 - 03:10Der er
11 kommentarer og 1 løsning
VB: kontroller properties af et MdiChild fra et andet MDIChild
Jeg Har en mainform med 2 Childvinduer
jeg gør følgende: en form med 2 MDIChild vinduer oprettes og me.MDIcontainer = True
I menupunktet Aboutklik:
Private Sub mnuAbout_Click(ByVal .... About.MdiParent = Me About.Show() Oversigt.Enabled = False End Sub
Oversigt(som automatisk bliver hentet) bliver gray'et og About boksen kommer fint frem. Derpå er en OK som så lukker. So far so good.
Men nu vil jeg gerne have at funktionen bag OK knappen i About skal enable Oversigt igen og lukke sig selv. Det kan jeg ik(læs ved ik). Jeg gør sådan, men den vil ik:
Private Sub OK_Click(ByVal ... Dim Oversigt = Oversigt() Me.Hide() Oversigt.Enabled = True End Sub
Den brager ned ved erklæringslinien (dim Overs...). Snakker noget om "Object variable or With Block not set". Instantsen af Oversigt er oprettet(sker i mainload), så jeg skal bare kunne kontakte den med enabled. Men ..... What to do?
Her skriver du at Oversigt både er en funktion og en type: Dim Oversigt = Oversigt() Dette opretter en ny instans af Oversigt: Dim Oversigt = new Oversigt()
Det du vil er: Private Sub OK_Click(ByVal ... Me.Hide() Dim Oversigt = Me.MdiParent Oversigt.Enabled = True End Sub
Nej Den virker ikke. Du du skriver gør kun Form1 enabled igen. Det har den hele tiden været. Det er kun et MdiChild window jeg skal have kontaktet og gjort Enabled = True.
Er det en du selv har kontrolleret efter ? Det var noget af det første jeg selv prøve lige efter du gav mig sidste tip.. Jeg kan ikke forstå da det sq da er logisk det der skrives..
Men hvis du gider tænke 2 sec over hvad der skal stå i Main også?
Der har jeg bare Dim Oversigt As New oversigt() som det eneste
For fanden vi roder rundt i Syntaxen her.. Hvor svært kan det være..
Det er et problem at du skriver Dim Oversigt As New oversigt(), da det er MEGET usmart at kalde en variabel det samme som en klasse.
Hvis der kun skal være et Oversigt-objekt, så brug i stedet: Dim Oversigten As New oversigt() Eller for at overholde kodestandarden for globale objekter Dim m_Oversigt = new Oversigt()
Og det er netop problemet, at din Oversigt ikke er global. Den eksisterer kun i din Click-event. Og derfor kan du ikke lige fange den fra Din About-form.
Så enten definerer du en global variabel m_Oversigt = new Oversigt() Og bruger følgende Click-events:
Private Sub mnuAbout_Click(ByVal .... About.MdiParent = Me About.Show() m_Oversigt.Enabled = False End Sub
Private Sub OK_Click(ByVal ... Me.Hide() Dim Oversigten = Me.MdiParent.m_Oversigt Oversigten.Enabled = True End Sub
Syntaksen er ikke så svær. Der er vist mere et spørgsmål om scope på de enkelte objekter, der er problemet.
For det første skal About og Oversigten være defineret Public i den Mainform.
Dernæst gøres følgende i begge dine events (Fx)
Private Sub OK_Click(ByVal ... Me.Hide() Dim HovedFormen = CType(Me.MdiParent,MainForm) ' Typen af din hovedform Dim Oversigten = HovedFormen .m_Oversigt ' m_Oversigt er beskrevet tidligere Oversigten.Enabled = True End Sub
Stædig er jeg. Men det virker sq nu. Nu kan jeg snakke på tværs af alle MdiChild vinduer..
Skide godt..
Synes godt om
Ny brugerNybegynder
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.