我在vb.net中为桌面应用程序编写了一个在关闭前完全保存文档的函数,我用System.Threading.Timer实现了它。
我在问你是怎么经历的。
所以,我做了一个定时器来保存文件关闭前。
但是,在没有计时器的测试中,只有一次调用函数或Handler,文档在关闭之前没有保存,因为出现了一个对话框,询问是否保存或取消。
真的需要计时器吗?因为我们知道计时器甚至可以使系统延迟一毫秒。
设置定时器为100毫秒。
但是,我不想使用定时器,我想在关闭前保存文档,只调用一次函数。
使用计时器真的是解决方案吗?或者只需要一个呼叫设置就可以完成?
如果它可以在一个函数调用中完成,那么我想我错过了一个代码。
谢谢你的意见和经验。
你可以处理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()并包含代码来保存数据。