Vb.net vb调试文本框更改

Vb.net vb调试文本框更改,vb.net,debugging,Vb.net,Debugging,我对VB还比较陌生,在编写程序时,我会跟踪文本框的变化,这是由于我在表单中进行了大量计算 我有一个脏代码跟踪更改,如果有什么更改,它会提示我保存或忽略 我的问题是,如果发生“脏”火灾,如何在msgbox中显示已更改的内容和希望更新的内容?有时代码会检测到更改,但我可以看到如此明显的更改。或者,或者我如何通过调试检测更改了什么?即使文本框的颜色发生了变化,我也会很高兴,至少这样我可以识别出应该发生的变化 我的脏代码如下: Private Sub Dirty() If Not Loa

我对VB还比较陌生,在编写程序时,我会跟踪文本框的变化,这是由于我在表单中进行了大量计算

我有一个脏代码跟踪更改,如果有什么更改,它会提示我保存或忽略

我的问题是,如果发生“脏”火灾,如何在msgbox中显示已更改的内容和希望更新的内容?有时代码会检测到更改,但我可以看到如此明显的更改。或者,或者我如何通过调试检测更改了什么?即使文本框的颜色发生了变化,我也会很高兴,至少这样我可以识别出应该发生的变化

我的脏代码如下:

    Private Sub Dirty()
    If Not LoadForm Then
        ' Validate()
        FuelTableBindingSource.EndEdit()
        If Fuel.HasChanges Then
            MeMsgBoxSaveChanges.ShowDialog()
            If MeMsgBoxSaveChanges.Result = "Yes" Then
                NavSaveBtnFuel.PerformClick()
            Else
                Fuel.RejectChanges()
            End If
        End If
    End If
End Sub


好消息。。。非常感谢。为了进一步澄清,我在一个表单上有许多文本框。这些文本框中大约有1/3是根据计算结果填充的。。。用户无法在这些文本框中执行任何操作。如果只是加载一条记录并查看它,然后通过BindingNavigator移动到另一条记录,则会因未知原因触发Dirty,然后用户会在默认情况下或作出反应,保存覆盖以前保存的内容。未发现任何值的明显变化。并非所有记录都会发生这种情况,但这种情况的发生频率已经足够高,以至于每当有人想要查看某个记录时,这种情况都会成为一种麻烦。因此,我希望让MsgBox显示所谓的“脏”或通过调试器(我不太熟悉)执行此操作,以确定1:是否存在表单格式错误(例如,从小数点后3位到小数点后2位……是的,我确实在大多数计算字段中使用了小数点后3位,但不是所有计算字段)2:计算错误(我有捕获计算错误的代码,因此这将是罕见的)3:其他未知内容发生了变化。根据您的回答,我需要将进行计算等的大部分文本框输入到dirty命令中?

假设我理解正确:每当用户更改其中一个文本框中的内容时,您都会调用
dirty()
提示用户是否保存,是吗

如果知道更改了什么并在消息框中显示它真的很重要,那么您必须知道哪个文本框的值更改了,它以前的值是什么,它的新值是什么。如果您提示用户是否保存更改,那么我认为这意味着您将这些值保存在某个地方…因此您已经有了每个文本框的上一个值。因此,将文本框和新值传递到
Dirty()
将是一件非常简单的事情

向函数中添加参数以接受这些值……类似于:
Dirty(ByRef thisBox作为文本框,ByVal newVal作为字符串)

然后,无论在何处进行调用,只要将这些参数添加到调用中即可。如果调用在textbox changed events中,则第一个参数是触发了change event的textbox,其值就是它的.text

这样,在Dirty中的代码中,您可以从保存的内容中检索以前的值,并仅引用该值和新值进行显示

我确实看到您正在使用“MeMsgBoxSaveChanges”,它必须是您自己的表单。因此,您必须将该信息添加到表单中。最好的方法可能是为这些值设置表单属性,然后在
Dirty()
中设置值

例如:更改的文本框名称为“Textbox1”。上一个值为“First”,新值为“Second”

在Textbox1.TextChanged事件中:

Dirty(TextBox1, TextBox1.Text)
肮脏的:

Dim prev = [get the saved value that corresponds with TextBox1]
Dim newMsgBox = New MeMsgBoxSaveChanges
newMsgBox.box = thisBox
newMsgBox.prev = prev
newMsgBox.cur = newVal
newMsgBox.ShowDialog()
您必须修改MeMsgBoxSaveChanges以按需要显示该信息


根据澄清更新:


所以我想我没有完全理解。如果Dirty()是你自己的方法,那么它一定是从某个地方被调用的。因此,如果你不确定原因,那么我建议两种方法来找出答案:1)通过在项目中搜索“Dirty()”的实例来反向工作,然后从那里向后检查代码,看看是否可以发现调用它的原因。2) 单击导航按钮时,在代码的第一行放置一个停止点(因为您说这是当用户移动到另一个记录时),并逐步遍历代码,直到调用“Dirty()”的地方,以便您可以找出原因2可能是最好的开始,为您提供线索,然后使用#1确认您在所有调用中发现的情况(假设调用的位置不止一个)。如果您不太熟悉使用调试器设置停止点和单步执行代码,请参阅上的MSDN文章(左侧导航)。

好信息。。。非常感谢。为了进一步澄清-@JohnEtling-感谢您的澄清。我已经在我的答案中添加了一个更新,以根据新信息为您提供额外的帮助。“脏”不是正确的词,它是令人讨厌的代码。用户总是,总是单击Yes,并且会因为不得不重复执行而感到恼火。它真正的意思是“我不确定我的代码下一步会有多糟糕,你确定要运行它吗?”选择“否”就足够了,但这不会发生。测试您的代码没有旁路,我们不会为您测试。我从未要求任何人测试我的代码。我正在寻找一点帮助,试着自己解决这个问题。谢谢你的回答,你的回答不是很有帮助。