Avatar billede deamill Nybegynder
09. marts 2010 - 10:20 Der er 7 kommentarer og
1 løsning

ReinisializeForm?

Hejsa,

Jeg har et spørgsmål.

Jeg har en form med en masse textboxe og knapper mv.

Alle disse bliver sat enabled/readonly mv. i runtime af mig.

Er det muligt at reinisialize en form, så den ser ud som den gjorde efter den første create?

Altså en form for resetForm?

Jeg kunne selvfølgelig lave en metode der manuelt ændrede alle knapper mv. men det ville være nemme, hvis der var en standrd metode til det?

På forhånd tak.
Avatar billede platik Nybegynder
09. marts 2010 - 13:08 #1
Du kan prøve Me.InitializeComponent() i din form.

Men det er ikke med sikkerhed at alt står deri, men det er den formen bruger til at finde ud af hvor knapper osv. skal være.
Hvis foreksempel selv har kodet teksten på din knap, vil den ikke ændre sig.
Avatar billede deamill Nybegynder
09. marts 2010 - 13:20 #2
Hej,

Det har jeg prøvet. Men efter jeg har kørt  Me.InitializeComponent() så er der ingen af knapperne på min form som virke, som om at jeg mister referencen til min form.
Avatar billede bvli Praktikant
09. marts 2010 - 13:30 #3
Din InitializeComponent() opretter nye instanser af knapperne - og det er nok ikke det du vil :)

Der er mange måder at løse dit problem på. Nogle mere elegante end andre. Memento-pattern'et kunne være en løsning på at gemme state.

http://en.wikipedia.org/wiki/Memento_pattern
Avatar billede deamill Nybegynder
09. marts 2010 - 13:38 #4
Hehe, ok, jeg tror jeg foretrækker noget VB kode.
Avatar billede platik Nybegynder
09. marts 2010 - 13:38 #5
Tja er jo heller ikke helt kønt at gøre det på den måde.

Kan også køre en Application.Restart() hvis det kan bruges.

Den korrekte måde er stadig at skrive sin tilstandsstyring selv, selvom det er ret kedeligt :-).
Avatar billede bvli Praktikant
09. marts 2010 - 13:50 #6
Kig på mønstret - ikke sproget.

En simpel version (i psudo-vb - jeg er ikke VB-Haj):

Private memento As New Dictionary(Of Control, Boolean)()

Private Sub SaveState()
    For Each c As Control In Me.controls
        memento(c) = c.Enabled
    Next
End Sub

Private Sub RestoreState()
    For Each c As Control In memento.Keys
        c.Enabled = memento(c)
    Next
End Sub

Kald SaveState() i din .ctor og RestoreState når du skal genetablere..
Avatar billede deamill Nybegynder
09. marts 2010 - 14:24 #7
Hmm, jeg håbede på en standard function til det.

Men jeg har lavet en work around.

Har lavet nedenstående function og kalder den fra min form :-)

    Private Function reloadForm(ByVal param1 As String)w window, and closes the old one
        Dim newMyForm As New MyForm(param1)

        Dim old_Left = Me.Left
        Dim old_Top = Me.Top
        Dim old_WindowState = Me.WindowState
        Me.Close()

        newMyForm.Show()
        newMyForm.Focus()
        newMyForm.BringToFront()
        newMyForm.Left = old_Left
        newMyForm.Top = old_Top
        newMyForm.WindowState = old_WindowState
    End Function
Avatar billede deamill Nybegynder
09. marts 2010 - 14:26 #8
Der gik noget galt i post, her er functionen

Private Function reloadForm(ByVal param1 As String)
        Dim newMyForm As New MyForm(param1)

        Dim old_Left = Me.Left
        Dim old_Top = Me.Top
        Dim old_WindowState = Me.WindowState
        Me.Close()

        newMyForm.Show()
        newMyForm.Focus()
        newMyForm.BringToFront()
        newMyForm.Left = old_Left
        newMyForm.Top = old_Top
        newMyForm.WindowState = old_WindowState
    End Function
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