繁体   English   中英

用户取消时保存对话框

[英]Save Dialog when User Cancel

我需要在我的应用程序中保存来自不同位置的文件,所以我为此创建了一个子文件; 一切正常,除非用户在保存对话框出现时单击取消; 如果用户点击“取消”,表格将关闭; 我尝试了下面代码中显示的两个选项但两个都没有用; 任何建议将不胜感激:

   Public Class Form1

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    SaveFileDialog()
End Sub

Sub SaveFileDialog()
    SaveFileDialog1.Filter = "TXT Files (*.txt)|*.txt"
    If SaveFileDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then
        'If SaveFileDialog1.ShowDialog <> Windows.Forms.DialogResult.Cancel Then
        Dim MekdamSaveFile = SaveFileDialog1.FileName
        System.IO.File.WriteAllText(MekdamSaveFile, "")
        My.Computer.FileSystem.WriteAllText(MekdamSaveFile, RichTextBox2.Text, True)
    End If
End Sub


Private Sub Form1_FormClosing(sender As Object, e As FormClosingEventArgs) Handles MyBase.FormClosing
    Dim result = MessageBox.Show("The File:  has been changed, do you want to save it? ", _
    "Mekdam Message 701", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question)
    If result = DialogResult.Cancel Then
        e.Cancel = True
    ElseIf result = DialogResult.No Then
        'PROCEED...
    ElseIf result = DialogResult.Yes Then
        SaveFileDialog()
    End If
End Sub

结束班

将SaveFileDialog子例程转换为函数,如果完成了其他任何操作,则返回False,然后在FormClosing EventHandler中测试它并停止关闭。

修改后的SaveFileDialog

Function SaveFileDialog() As Boolean
    SaveFileDialog1.Filter = "TXT Files (*.txt)|*.txt"
    If SaveFileDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then
        'If SaveFileDialog1.ShowDialog <> Windows.Forms.DialogResult.Cancel Then
        Dim MekdamSaveFile = SaveFileDialog1.FileName
        System.IO.File.WriteAllText(MekdamSaveFile, "")
        My.Computer.FileSystem.WriteAllText(MekdamSaveFile, RichTextBox2.Text, True)
        Return True 'Return True if Ok is clicked
    Else
        Return False 'return false this will give you something to conditionaly test
    End If
End Function

修改了FormClosing EventHandler

Private Sub Form1_FormClosing(sender As Object, e As FormClosingEventArgs) Handles MyBase.FormClosing
    Dim result = MessageBox.Show("The File:  has been changed, do you want to save it? ", _
"Mekdam Message 701", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question)
    If result = DialogResult.Cancel Then
        e.Cancel = True
    ElseIf result = DialogResult.No Then
        'PROCEED...
    ElseIf result = DialogResult.Yes Then
        If Not SaveFileDialog() Then e.Cancel = True 'this will abort the close
    End If

End Sub

不太清楚你需要什么......试试这个:

Public Class Form1

Private Sub Test() Handles MyBase.Load

    Do Until Not ShowSaveFileDialog() = DialogResult.Cancel
        ShowSaveFileDialog()
    Loop

End Sub

Private Function ShowSaveFileDialog() As DialogResult

    Using SFD As New SaveFileDialog With
        {
         .Filter = "TXT Files (*.txt)|*.txt",
         .ValidateNames = True
        }

        AddHandler SFD.FileOk, AddressOf SFD_FileOk
        Return SFD.ShowDialog()
        RemoveHandler SFD.FileOk, AddressOf SFD_FileOk

    End Using

End Function

Private Sub SFD_FileOk(sender As Object, e As System.ComponentModel.CancelEventArgs)

    IO.File.AppendAllText(sender.FileName, RichTextBox2.Text, System.Text.Encoding.Default)

End Sub

End Class

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM