在vb中延迟textbox-textchanged

时间:2014-12-17 10:06:58

标签: vb.net timer delay intervals

我是一个简单的初学者,需要小帮助: 我有textbox1和textbox2。 假设你在textbox1中输入一个数字(例如21),我需要textbox2给我双重数字(42)。我的意思是我需要textbox2.text=2*textbox1.text

我使用了这个简单的代码:

Private Sub TextBox1_Textlength(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles TextBox1.TextChanged
         TextBox2.Text = 2*TextBox1.Text

问题是:当我(在textbo1中)只写了一个数字时,一切都没问题,但是我不能写两个(或更多)数字。 如何设置延迟(间隔),允许我在激活textbox1_changed之前输入类似(例如1990)的数字?

2 个答案:

答案 0 :(得分:1)

每次更改文本框的内容时都会触发TextChanged。所以没有办法阻止这种行为。也许您可以添加一个按钮并在按钮单击事件上移动重新计算,或者更好地为the Validating event添加事件处理程序。 退出控件时会触发此事件,并且您还可以选中检查输入并阻止退出TextBox控件

Private Sub textBox1_Validating(ByVal sender As Object, _
ByVal e As System.ComponentModel.CancelEventArgs) Handles TextBox1.Validating
    Dim v as Integer
    if Not Int32.TryParse(TextBox1.Text, v) Then
         e.Cancel = True
         MessageBox.Show("Please type a valid number")
    Else
        TextBox2.Text = (v * 2).ToString
    End If
End Sub 

请注意,当您处理期望数值的用户输入时,您应特别注意,因为您不知道用户键入了什么。在这种情况下,Int32.TryParse似乎是合适的方法。

另一个建议是立即启用项目中的Option Strict ON,默认为OFF,这允许非常危险的代码,比如处理字符串就像是一个数字。

答案 1 :(得分:1)

你不需要。只允许每次触发TextChanged事件,第二个文本框将始终显示第一个值的两倍,因此当输入1时,它将显示2,当添加9时,它将显示38,所以上。您当然应该解决史蒂夫对验证和隐含类型转换的担忧。