Avatar billede cpmonster Nybegynder
30. september 2002 - 03:10 Der 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?
Avatar billede rbl Praktikant
30. september 2002 - 03:23 #1
hvis der er oprettet en instans af Oversigt i forvejen, skal der ikke stå Dim foran den i sub'en
Avatar billede cpmonster Nybegynder
30. september 2002 - 03:29 #2
Nej. Men linien slet ikke er der, kender den ikke til oversigt nedenunder
og:
oversigt = Oversigt()
dur ik. Heller ikke:
Oversigt as Oversigt()
Avatar billede kichian Nybegynder
30. september 2002 - 10:52 #3
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
Avatar billede kichian Nybegynder
30. september 2002 - 10:53 #4
Eller kortere:
Private Sub OK_Click(ByVal ...
    Me.Hide()
    Me.MdiParent.Enabled = True
End Sub
Avatar billede cpmonster Nybegynder
30. september 2002 - 10:55 #5
Den Tror jeg på!!!
Men jeg kan først prøve det senere.

Jeg godkender lige så snart jeg har prøvet
Avatar billede cpmonster Nybegynder
30. september 2002 - 18:54 #6
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.
Avatar billede kichian Nybegynder
01. oktober 2002 - 09:37 #7
Jamen det er da

Private Sub OK_Click(ByVal ...
    Me.Hide()
    Me.MdiParent.Oversigt.Enabled = True
End Sub

Den lidt længere er

Private Sub OK_Click(ByVal ...
    Me.Hide()
    Dim Oversigt = Me.MdiParent.Oversigt
    Oversigt.Enabled = True
End Sub

Det vigtigste er at forstå hvad MdiParent er og hvilke objekter denne indeholder.
Avatar billede cpmonster Nybegynder
01. oktober 2002 - 10:02 #8
Desværre..

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..
Avatar billede kichian Nybegynder
01. oktober 2002 - 10:46 #9
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.
Avatar billede kichian Nybegynder
01. oktober 2002 - 10:47 #10
PS. Jeg kommer nok til at blande lidt C# ind i eksemplerne. Men det burde vel ikke være noget problem.
Avatar billede kichian Nybegynder
01. oktober 2002 - 13:29 #11
Jeg lavede en lille test.

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
Avatar billede cpmonster Nybegynder
01. oktober 2002 - 15:52 #12
Stædig er jeg. Men det virker sq nu. Nu kan jeg snakke på tværs af alle MdiChild vinduer..

Skide godt..
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