Archief - [PROG]-[VB .NET]Form_Close annuleren

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

grinshu

Legacy Member
Hallo iedereen,

1° ik hou mij voor het moment bezig met het maken van een simpele tekstverwerker in VB .NET. En bij de afwerking ervan stuitte ik op volgend probleem:

ik wil net zoals in word bij het afsluiten van het programma'tje een messagebox laten weergeven met de vraag om het desbetreffende document op te slaan met de opties Yes, No, Cancel.

De Bedoeling van de 3 "Knoppen" lijkt me vrij duidelijk. Wanneer de Yes-optie wordt gebruikt, is het de bedoeling dat het bestand wordt opgeslaan of indien het bestand niet reeds is opgeslaan een SaveFileDialog wordt weergegeven. Wanneer de No-optie wordt gebruikt, moet de tekstverwerker gewoon afsluiten zonder verdere handelingen. En bij het derde zit dan mijn probleem: ik wil dat wanneer je op Cancel duwt, je form blijft openstaan zoals het stond voor je op Afsluiten drukte.

Mijn vraag is nu, welke command moet ik daarvoor invoeren in mijn procedure ?

Deze code heb ik al:
Code:
Private Sub frmTekstverwerker_Closed(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Closed
        Dim iKnop As Integer, iResultaat As Integer
        iKnop = MessageBoxButtons.YesNoCancel
        iResultaat = MessageBox.Show("Wilt u de wijzigingen in " & Me.Text & " opslaan?", "Wijzigingen opslaan", iKnop, MessageBoxIcon.Warning)
        Select Case iResultaat
            Case DialogResult.Yes
                If msBestandsnaam = "" Then
                    If sfd.ShowDialog = DialogResult.OK Then
                        rtbTekst.SaveFile(sfd.FileName)
                        msBestandsnaam = sfd.FileName
                    ElseIf sfd.ShowDialog = DialogResult.Cancel Then
                        'Hier moet de command komen wanneer cancel gedrukt wordt.
                    End If
                Else
                    rtbTekst.SaveFile(msBestandsnaam)
                End If
                Me.Text = sfd.FileName
            Case DialogResult.No
                'Hier uiteraard geen command omdat hij gewoon de tekstverwerker moet afsluiten zoals de procedure-titel aangeeft.
            Case DialogResult.Cancel
                'Hier moet de command komen wanneer cancel gedrukt wordt.
        End Select
    End Sub
Sommige van mijn werkwijzen kunnen misschien korter, maar met mijn kennis leek dit me de korste wijze.

------------------------------------------------------------------------------------------

2° Bij simpel rekenprogramma'tje heb ik een label en een tekstvak. In het label laat ik 2 random getallen genereren en in het tekstvak moet de gebruiker dan het resultaat invoeren. Dit werkt voor de 4 basis bewerkingen: optellen, aftrekken, delen en vermenigvuldigen. Maar bij het delen genereert ie logischerwijs vaak getallen die als resultaat een oneindig komma getal opleveren (bv.: 1 / 3, 2 / 3,...). Dat zou ik willen voorkomen en daarvoor heb ik met een Do ... Loop-lus gewerkt. De code ziet er als volgt uit:

Code:
ElseIf mnuDelen.Checked = True Then
            Me.Text = "Leren delen"
            If mnuTot10.Checked = True Then
                miGetal1 = moRandom.Next(0, 10)
                miGetal2 = moRandom.Next(0, 10)
                Do
                    miGetal1 = moRandom.Next(0, 10)
                    miGetal2 = moRandom.Next(0, 10)
                    lblSom.Text = miGetal1 & " / " & miGetal2
                Loop Until miGetal1 Mod miGetal2 = 0
            ElseIf mnuTot20.Checked = True Then
                miGetal1 = moRandom.Next(0, 20)
                miGetal2 = moRandom.Next(0, 20)
                lblSom.Text = miGetal1 & " / " & miGetal2
            ElseIf mnuTot100.Checked = True Then
                miGetal1 = moRandom.Next(0, 100)
                miGetal2 = moRandom.Next(0, 100)
                lblSom.Text = miGetal1 & " / " & miGetal2
            End If
            txtUitkomst.Text = ""
        End If
Alles werkt prima tot er dan getallen worden gegenereert waarvan de uitkomst verschillend is aan 0 of 1. Met andere woorden: bewerkingen zoals 1 / 1, 4 / 4, 0 / 8, ... (steeds met 0 of 1 als resultaat) werken zoals het hoort. Maar wanneer ik dan iets krijg zoals 4 / 1, dan crasht ie wanneer ik het antwoord ingeef en op de "Volgende" knop duw. Deze 'volgende' knop heeft niets met probleem te maken.



Alvast bedankt,


grinshu

BELANGRIJKE EDIT:
het 2e probleem was volledig mijn fout, excuses daarvoor. Ik was vergeten dat het 2e getal geen 0 mag zijn, omdat je niet kan delen door 0.

My bad ;)

alva848

Legacy Member
Ik denk dat je best de event "on-close" gebruikt(naam kan iets anders zijn).
Deze wordt afgevuurd net voor je form afsluit.
Dus als je daar om een bevestiging vraagt zul het wel kunnen oplossen.

Code:
ElseIf mnuDelen.Checked = True Then

Mage je ook zo schrijven trouwens:
Code:
ElseIf mnuDelen.Checked Then
De '= true' hoeft er niet bij. :)

NoReason

Legacy Member
Private Sub frmMain_Closing(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles MyBase.Closing
If MessageBox.Show("sluiten?", "sluiten", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = DialogResult.No Then
e.Cancel = True
End If
End Sub

dus met die e.Cancel werken als het mag doorgaan of nie... die if kunt ge ook in een select case zetten.

grinshu

Legacy Member
NoReason zei:
Private Sub frmMain_Closing(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles MyBase.Closing
If MessageBox.Show("sluiten?", "sluiten", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = DialogResult.No Then
e.Cancel = True
End If
End Sub

dus met die e.Cancel werken als het mag doorgaan of nie... die if kunt ge ook in een select case zetten.
thanks, ik heb gewoon de 1e lijn (private sub..) en e.cancel veranderd bij mij en het werkt

ik dacht al dat het met e.cancel was maar ik kreeg nooit die optie doorda ik da nie in die bovenste lijn aangaf...
tx

@alva, merci voor de tip, da zal mijn werk al heel wa lichter maken want voor de moment werken we in de les nogal veel met die true/false

mag slotje

blastboy

Legacy Member
vang de handle op van de close event zoals het laatste voorbeeld.
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan