Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[vb] heropenen van een form

Pagina: 1
Acties:

  • Dorgaldir
  • Registratie: September 2009
  • Laatst online: 10-04 22:52

Dorgaldir

Creature of the web

Topicstarter
Hey,

Ik ben een vb applicatie aan het schrijven met verschillende forms.
Als ik een nieuwe form wou openen kreeg ik een foutmelding (iets wat ik nog niet was tegengekomen)
"Reference to a non-shared member requires an object reference"

Ik heb dit opgezocht en leerde dat ik eerst de form moet initialiseren.
Dus dat deed ik ook.

Maar als ik nu in dat nieuwe form terug wil gaan naar de oude dan krijg ik ook die melding, maar als ik die weer initialiseer dan maakt hij een nieuwe instantie van deze form en kom ik niet terug waar ik eigenlijk wou zijn.

MainDlg.vb
Visual Basic:
1
2
3
4
5
6
7
8
Private Sub btnCollect_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCollect.Click
        Dim Menu_Collect As New Menu_Collect

        blnMenuCollect = True
        Menu_Collect.Show()
        Me.Hide()

    End Sub


Menu_Collect.vb
Visual Basic:
1
2
3
4
5
6
Private Sub btnBack_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnBack.Click

        MainDlg.Show() 'hier krijg ik dus een error omdat ik niet opnieuw de Dim heb staan, als ik dat wel doe krijg ik dus een nieuwe versie van deze form, maar ik wil terug naar de oude.
        Me.Hide()

    End Sub


Bij het vorige waar ik aan gewerkt heb (heb ik wel niet van de grond op moeten bouwen) heb ik dit probleem niet en kan ik zomaar elk form aanroepen van overal. Dus waarom kan ik dat hier niet, wat doe ik fout?


Ik weet niet of ik het duidelijk genoeg heb uitgelegd dus vraag gerust om duiding.

Just me


  • Acid_Burn
  • Registratie: Augustus 2001
  • Laatst online: 22-11 20:48

Acid_Burn

uhuh

Is maindlg een type of een globale var?
Wat je zou kunnen doen is na de declaratie van menu_collect de owner op me zetten
Menu_Collect.owner = me

en dan bij je button click niet maindlg.show, maar me.owner.show

Me is in deze context het window waar de code bij hoort. Dus waar de owner gezet wordt is Me de instance van MainDlg, De Me in me.owner.show slaat op de instance van Menu_Collect.

[ Voor 29% gewijzigd door Acid_Burn op 05-12-2013 12:04 ]

Glass Eye Photography | Zelfbouw wireless fightstick | Mijn puzzel site


  • Dorgaldir
  • Registratie: September 2009
  • Laatst online: 10-04 22:52

Dorgaldir

Creature of the web

Topicstarter
Blijkbaar een type, maar in het vorige projectje waar ik aan werkte kon ik wel zomaar forms aanmaken en die aanroepen, dus ik snap niet goed waarom hij dat nu niet doet.

Die owner werkt wel goed dus daar kan ik opzich voorlopig wel mee verder, dus daarvoor al zeker dank.

Edit:
Ik vind ook helemaal niet hoe ik van een form object een globale variabele kan maken.
Als ik het in MainDlg op public zet kan ik er nog niet aan in andere forms.
En als ik het in mijn module reference.vb zet dan ook niet, hoewel hij de boolean die ik daar heb staan wel kan aanspreken n MainDlg.vb

[ Voor 36% gewijzigd door Dorgaldir op 05-12-2013 12:43 ]

Just me


  • Acid_Burn
  • Registratie: Augustus 2001
  • Laatst online: 22-11 20:48

Acid_Burn

uhuh

Globaal moet je eigenlijk ook niet willen. Voordeel van de owner constructie is dat je Menu_Collect ook vanaf een ander form kan oproepen en dan het juiste form weer geactiveerd wordt. Dat zal misschien niet nodig zijn in dit geval, maar als je altijd zo werkt hoeft je daar ook niet over na te denken :)

Glass Eye Photography | Zelfbouw wireless fightstick | Mijn puzzel site


  • Dorgaldir
  • Registratie: September 2009
  • Laatst online: 10-04 22:52

Dorgaldir

Creature of the web

Topicstarter
Hoe kan ik die dan aanroepen vanuit een andere form (stel vanaf Form_Foo.vb) als de owner van menu_collect maindlg is?

Just me


  • Acid_Burn
  • Registratie: Augustus 2001
  • Laatst online: 22-11 20:48

Acid_Burn

uhuh

Dat bedoel ik niet. Als je de owner altijd op het form zet dat de dialoog spawned, dan kun je dus weer makkelijk terug naar dat form. Dus als je vanuit een instance van form_foo een form_bar instance spawend. Dan kan je bij het sluiten van die instance van form_bar makkelijk de owner weer activeren, welke in dat geval dan form_foo zou zijn.

Als je altijd een reference naar je maindlg wilt hebben, dan zul je iets van een globale var aan moeten maken waar je dan bij het load event van je maindlg een refentie naar maakt

In formload zet je dan bijvoorbeeld:
MainDlgRef = Me

MainDlgRef declareer je dan in een globals.vb module o.i.d.

Het kan, maar persoonlijk heb ik het eigenlijk nog nooit nodig gehad. Als je altijd gewoon netjes de owner (of parent) structuur aanhoudt heb je geen globale referentie nodig.

Glass Eye Photography | Zelfbouw wireless fightstick | Mijn puzzel site


  • Dorgaldir
  • Registratie: September 2009
  • Laatst online: 10-04 22:52

Dorgaldir

Creature of the web

Topicstarter
Ok ik denk dat ik het snap.

Ik ga er wel gebruik van moeten maken denk ik want het zal een redelijke collectie forms worden en vanop elk form ga ik moeten terug kunnen gaan naar het hoofdmenu (maindlg.vb), ookal zit ik in de tree een laag of 3 dieper.

Just me

Pagina: 1