好的,有很多例子,但它们不是我想要的。
我的VB.NET应用程序加载并从XML文件中读取以填充文本框。然后,用户可以更改文本并保存。但是如果该用户去做其他事情,比如更改下拉框中的选项,我希望它弹出一个对话框,警告他们文本没有保存,并给他们选择说丢弃更改,保存更改等
关于如何最好地实现这一点的任何想法?我是否创建隐藏文本框并进行比较?我觉得我过度工程可以很容易地完成。
提前致谢。
[更新] - 由于文本数量很少,我将使用两个文本框然后比较结果,但这是我与MsgBox的问题。无论如何,它总是认为我点击了是。想法还是应该转到新的Q?
这是我的测试代码:
Private Sub ComboBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox1.SelectedIndexChanged
If txtDetails.Text <> txtDetailsCOPY.Text Then
MsgBox("You changed text." & vbCrLf & "To save it, click YES" & vbCrLf & "To discard the changes, click NO.", MsgBoxStyle.YesNo, "Text Changed!")
If MsgBoxResult.Yes Then
MsgBox("You clicked YES")
ElseIf MsgBoxResult.No Then
MsgBox("You clicked NO")
End If
ElseIf txtDetails.Text = txtDetailsCOPY.Text Then
'MsgBox("Nothing changed!")
Exit sub
End If
End Sub
答案 0 :(得分:1)
您可以添加一个布尔标志,例如textNotSaved
作为标志。在文本框的text_changed
事件中,您可以将标志设置为true。保存文本时,可以将其设置为False。并且每当发生任何其他事件时,例如,按钮上的click事件,检查该标志是否为真;如果是,则提示用户,例如,在消息框的帮助下。
希望这会有所帮助。
答案 1 :(得分:0)
我会推迟保存,直到用户点击包含文本框的对话框上的“取消”或“确定”按钮。如果不可行,则将文本框设置为只读,提供编辑按钮,然后打开模式对话框以编辑文本框。
用户在离开文本框时对邮件进行装箱的问题在于它极具破坏性。从用户的角度来看,消息框是最昂贵的认知元素;它们代表完全中断。当用户评估如何处理消息框时,一切都会停止。这就是为什么用户经常忽略它们,并在没有正确评估它们的情况下解雇它们,即使它们很重要。所以不要使用它们。
如果您有多个文本框,请考虑实施“脏跟踪”。 https://www.google.com/search?q=form.dirty+winforms
答案 2 :(得分:-1)
通常,您将在模型IE中显示正在显示的数据的内存表示形式。更新文本框时,它会在该模型中设置属性。然后模型通过设置脏标志或保留原始模型的副本来知道它已更改。当您开始加载新模型时,您可以检查您创建的机制,以确保您之前的模型尚未保存。然后你弹出对话框。不要将文本框用作数据存储。