Programma afsluiten

Status
Niet open voor verdere reacties.

old Hippy

Gebruiker
Lid geworden
24 mei 2008
Berichten
911
Hallo zamen

Als ik mijn programma afsluit gebruik ik in de formclosing de volgende code.
Dit werkt prima met een database.
Is dit ook mogelijk met een listview dus dat als er veranderingen zijn aangebracht.
dat er de melding komt of je het wil opslaan of niet.
En als er niets is veranderd dat het dan gewoon sluit.

Met vriendelijke groet Old Hippy
Code:
        Me.Validate()
        Me.BindingSource3.EndEdit()
        Me.GastenBindingSource2.EndEdit()
        Me.CategorieBindingSource2.EndEdit()
              
        If Me.TaraAdminDataSet.HasChanges Then
                       Select Case MessageBoxEx.Show("Wil je de wijzigingen opslaan?", "Taracentrum", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Information)
                Case Windows.Forms.DialogResult.Cancel
                    e.Cancel = True
                Case Windows.Forms.DialogResult.Yes
                    e.Cancel = Not Me.Save()
                Case Else
                    'Close form (default)
            End Select
        End If
 
Dat is een beetje afhankelijk wat er in de view staat en hoe je het aan kan passen.

Je kunt bij een edit actie een vlag zetten via een van de events. Bij het afsluiten controleer je je vlag en als die gezet is vraag je of je de wijzigingen op wil slaan. Er is geen standaard "check" die je kan aanroepen om de verandering te bekijken.

Bij seriele data wordt ook wel eens een checksum vergeleken. Je maakt een checksum bij het openen. vervolgens maakt je een checksum bij het sluiten. Als ze niet overeen komen is er iets veranderd. Deze methode is echter niet zo van toepassing bij een listview vermoed ik.
 
Inderdaad, je zou een globale Boolean genaamd contentsChanged of zoiets kunnen maken en deze op True zetten wanneer je een item aan je ListView toevoegt of wanneer je een item verwijderd of aanpast. Dan is het verder simpelweg een kwestie van de waarde van contentsChanged controleren. Is de waarde True, vraag de gebruiker of de wijzigingen moeten worden opgeslagen. Is de waarde False, vraag dan niks en sluit af.
 
Ha Wampier
Dank voor de reactie.
De listview word ingevuld door textboxen met een druk op de knop staat dit in de listview.
er is dus een regel bij gekomen die moet je saven, wordt dit vergeten krijg je bij het sluiten de herinnering dat er nog iets.
moet worden opgeslagen.
Als er wel is gesaved zou de herinnering dus niet moeten plaatsvinden.
 
Bij het onchange event van de listbox of in de code waar je een textbox toevoegt aan de listview zet je een global variable (bijvoorbeeld een boolean die je "nogsaven" noemt).

Drukt iemand met de hand op de save knop doe je: nogsaven = false

staat bij het afsluiten "nogsaven" op true laat je de bevestiging zien en anders sluit je je programma.

*edit* zie net dat atom ook al wat had toegevoegd in die trant
 
Laatst bewerkt:
Hi dank Wampier
en The Michty Atom

hoe ziet dit er in code uit?
Sorry maar heb nog niet met global variable of boolean gewerkt

Old Hippy
 
Een globale variable maak je door deze buiten je subroutines en methods (maar wel binnen je Form class!) te declareren. Dan kun je de variable overal in hetzelfde bestand aanroepen.

Een Boolean variable is een variable die alleen True of False als waarde kan hebben.

Code:
Dim contentsChanged As Boolean = False
 
Ah Dank Dank
Ga hier even me aan de gang.
Als het werkt horen julie het.
 
Hi Krijg de volgende melding
An unhandled exception of type 'System.StackOverflowException' occurred in System.Windows.Forms.dll

Wat ik heb gedaan is het volgende
in de onder de saveknop staat
Code:
 contentsChanged = True

en in de formclosing
Code:
 If contentsChanged = True Then
            UplodeText()
        ElseIf contentsChanged = False Then
            Me.Close()

        End If
Als ik heb gesaved doet hij het goed als ik niets heb gedaan sluit hij wel af maar met de fout melding
 
Sorry dom missertje van mij werkt nu helemaal goet hartelijk dank

Wampier en The Michty Atom

Old Hippy

Even de code voor als iemand hem wel gebruiken.
Code:
 If contentsChanged = True Then
            Select Case MessageBox.Show("Wil je de gegevens opslaan?", "Lakshmi", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Information)
                Case Windows.Forms.DialogResult.Cancel
                    e.Cancel = True
                Case Windows.Forms.DialogResult.Yes
                    UplodeText()
                Case Else
                    'Close form (default)
            End Select
        End If
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan