2

我在vb.net 中为桌面应用程序创建了一个函数,它在关闭之前完全保存了文档,我使用 System.Threading.Timer 实现了它。

我特意问你是如何经历的。

所以,我做了一个计时器,在关闭之前保存文件。

但是,在没有计时器的情况下进行测试时,只需调用函数或处理程序,文档在关闭之前不会保存,因为会出现一个对话框询问是否保存或取消。

真的需要计时器吗?因为我们知道计时器甚至可以延迟系统一毫秒。

我将计时器设置为 100 毫秒。

但是,我不想使用计时器,我想在关闭之前保存文档,以便只调用一次函数。

真的使用计时器是解决方案吗?或者它可以通过一个呼叫设置来完成?

如果它可以在一个函数调用中完成,那么我想我错过了一个代码。

感谢您的意见和经验。

4

1 回答 1

1

您可以处理 FormClosing 事件。在处理程序中,您可以在表单关闭之前执行操作,您甚至可以取消关闭事件。这是一个例子:

Dim Saved As Boolean = False

Private Sub Form1_FormClosing(sender As Object, e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
    If Not Saved Then
        Dim Result As DialogResult = MessageBox.Show("Do you want to save your text?", "Save Text?", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question)
        Select Case Result
            'Since pressing the No button will result in closing the form without
            'saving the text we don't need to handle it here
            Case Windows.Forms.DialogResult.Yes

                SaveText_Click()
            Case Windows.Forms.DialogResult.Cancel
                e.Cancel = True
        End Select
    End If
End Sub

Private Sub TextBox1_TextChanged(sender As System.Object, e As System.EventArgs) Handles TextBox1.TextChanged
    Saved = False
End Sub
'SaveText is a button for the user to manually save the text on demand.
'Since we don't need the sender or the eventargs, we can handle the click event without them.
'this way we can call this like any sub without having to worry about providing the right parameters.
Private Sub SaveText_Click() Handles SaveText.Click
    'Add your procedure to save the text here
    Saved = True
End Sub

如果您不想在不保存的情况下关闭选项,只需省略消息框和选择块,只需调用 SaveText() 并包含代码以将数据保存在其中。

于 2013-06-16T21:20:18.753 回答