vb调试文本框更改

时间:2017-05-16 20:59:56

标签: vb.net debugging

我还是比较陌生的VB,在编写我的程序时,我正在跟踪文本框的更改,因为我在表单中进行了很多计算。

我有一个跟踪变化的DIRTY代码,如果有变化,它会提示我保存或忽略。

我的问题是,如果“Dirty”触发,我如何显示已更改的内容并希望在msgbox中更新?有时候代码会检测到更改,但我可以看到如此明显的变化。要么是这样,要么如何通过DEBUG检测更改内容?即使文本框改变颜色显示变化,我也会很高兴,至少我可以识别出应该改变的内容。

我的DIRTY CODE如下:

    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显示所谓的Dirty或通过调试器(我不太熟悉)来执行此操作来确定是否存在表单格式错误(例如,从3到2小数位)。 ..是的我在大多数情况下使用3个小数位,但不是所有计算字段)2:计算错误(我有代码来捕捉计算错误所以这将是罕见的)3:其他未知的东西改变了。根据你的答案,我需要输入大多数每个文本框,它们会对脏命令进行计算等吗?

1 个答案:

答案 0 :(得分:0)

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

如果知道更改了什么并在消息框中显示它真的很重要,您必须知道哪个文本框的值已更改,其先前值是什么,以及它的新值是什么。如果您提示用户是否保存更改,那么我认为这意味着您要将这些值保存在某处...因此您已经为每个文本框保留了以前的值。因此,将文本框和新值传递给Dirty()

就足够了

向函数添加参数以接受这些值....类似于:Dirty(ByRef thisBox As TextBox, ByVal newVal As String)

然后,无论您在哪个地方拨打电话,只需将这些参数添加到您的通话中即可如果调用是在您的文本框更改事件中,那么您的第一个参数是触发了change事件的文本框,而值只是它的.text。

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

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

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

在Textbox1.TextChanged事件中:

Dirty(TextBox1, TextBox1.Text)

In Dirty:

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来确认你发现的是所有调用中的情况(假设有多个地方被调用)。如果您不太熟悉使用调试器来设置停止点和单步执行代码,请参阅getting started上的MSDN文章(左侧导航)。