Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
检查VB.NET中文本框中的文本是否更改_Vb.net_Winforms - Fatal编程技术网

检查VB.NET中文本框中的文本是否更改

检查VB.NET中文本框中的文本是否更改,vb.net,winforms,Vb.net,Winforms,好的,有这么多的例子,但它们不是我要找的 我的VB.NET应用程序加载并读取XML文件以填充文本框。然后,用户可以更改文本并保存它。但是,如果该用户去做其他事情,如更改下拉框中的选择,我希望它弹出一个对话框,警告他们文本未保存,并给他们选项说放弃更改、保存更改等 关于如何最好地实现这一点,有什么想法吗?我是否要创建隐藏的文本框并进行比较?我觉得我在设计一些很容易做到的事情 提前谢谢 [更新]-由于文本数量较少,我将使用两个文本框,然后比较结果,但MsgBox存在一个问题。不管怎样,它总是认为我点

好的,有这么多的例子,但它们不是我要找的

我的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
Private子Combox1\u SelectedIndexChanged(发送方作为对象,e作为事件参数)处理Combox1.SelectedIndexChanged
如果是txtDetails.Text txtDetails.Text,则
MsgBox(“您更改了文本。”&vbCrLf&“若要保存它,请单击“是”&vbCrLf&“若要放弃更改,请单击“否”,MsgBoxStyle.YesNo,“文本已更改!”)
如果MsgBoxResult.Yes,则
MsgBox(“您单击了是”)
ElseIf MsgBoxResult。那么没有
MsgBox(“您单击了否”)
如果结束
ElseIf txtDetails.Text=txtDetails.Text然后
'MsgBox(“没有更改!”)
出口接头
如果结束
端接头

通常,您将拥有一个模型,即正在显示的数据的内存表示形式。更新文本框后,它将在该模型中设置一个属性。然后,通过设置脏标志或保留原始模型的副本,模型知道它已更改。当你去加载一个新的模型时,你会检查你所创建的任何一种机制来告诉你以前的模型没有被保存。然后弹出对话框。不要将文本框用作数据存储

我会推迟保存决定,直到用户点击包含文本框的对话框上的取消或确定按钮。如果不可能,则将文本框设置为只读,提供编辑按钮,并打开模式对话框来编辑文本框

当用户离开文本框时,对其进行消息装箱的问题是,这会造成极大的破坏。从用户的角度来看,消息框是最昂贵的认知元素;它们代表着完全的中断。当用户评估如何处理消息框时,所有操作都停止。这就是为什么用户经常忽略它们,并且在没有正确评估它们的情况下将它们丢弃,即使它们很重要。所以不要用它们来做这个


如果你有一个以上的文本框,考虑实现“脏跟踪”。

你可以添加一个布尔标志,比如“代码>文本保存为”作为一个标志。在文本框的
text\u changed
事件中,您可以将该标志设置为true。无论何时保存文本,都可以将其设置为False。无论何时发生任何其他事件,例如,按钮上的单击事件,检查标志是否为真;如果是,则提示用户,例如,借助消息框。
希望这能有所帮助。

我假设在用户试图离开对话框之前不必进行保存,对吗?一种方法是收听
TextChanged
事件。如果在设置文本框的内容后出现这种情况,则当前内容可能与原始内容不同。@RobertHarvey-这是正确的。我试图“防止”用户在任何情况下丢失键入信息的问题。@NicoSchertler-我也这么认为,但听多个文本框会消耗什么样的资源?(在本例中3)如果一个或多个文本框变脏(或者表单的任何部分变脏),如果用户试图关闭对话框,为什么不抛出消息框?看,我假设你在使用Winforms?你没有给你的问题贴上这样的标签。这也是我的想法(消息框-规则太过宽松,无法强制执行保存、取消等),就像我需要某种编辑器表单一样。。。