vb.net - 单击按钮时冻结程序
问题描述
代码直接附加到按钮
Private Sub btnAdd_Click(sender As Object, e As EventArgs) Handles btnAdd.Click
Dim person As String = txtIn.Text
If person <> "" Then
If IsInFile(person) Then
MessageBox.Show("Name Is Already In File!", "No Need")
Else
ReDim names(names.Length + 1)
names(names.Length - 1) = person
Array.Sort(names)
MessageBox.Show("Name Added", "Success")
File.WriteAllLines("Names.txt", names)
End If
End If
End Sub
其余代码
Function IsInFile(person As String) As Boolean
Dim x As Integer = 0
Dim lines = File.ReadAllLines("Names.txt").Length
If File.Exists("Names.txt") Then
While x <= lines
If person.ToUpper = names(x).ToUpper Then
Return True
End If
End While
End If
Return False
End Function
Private Sub frmNames_Load(sender As Object, e As EventArgs) Handles MyBase.Load
names = IO.File.ReadAllLines("Names.txt")
End Sub
只有 Import 是 System.IO 没有调试错误,但是当我在 txtIn 中输入名称并单击按钮时,程序会冻结。名称是否在“names.txt”中并不重要,所以我认为 IsInFile 不是问题
解决方案
您的问题是x
永远不会<=
lines
,因为您没有增加它。在循环中包含一个增量:
While x <= lines
If person.ToUpper = names(x).ToUpper Then
Return True
End If
x += 1
End While
@Hans Passant 在他的评论中提出了很好的建议。如果您不熟悉调试器,在尝试使用该语言执行任何其他任务之前,重新访问与调试 VB.Net 程序相关的基础材料可能会对您有所帮助。这样做可以为您现在和将来节省大量时间。
推荐阅读
- javascript - 条形图中的多个数据集 -> 条形超出范围
- android - 主题中不可用的属性的默认值
- php - 如何获取 AWS 签名令牌以使用 AutoDesk Forge API 上传转换后的文件?
- unity3d - 使用 Unity 开发需要同时在 PC 和 Android VR 眼镜上运行的模拟器
- python - 我可以使用 PyQt5 的 QThread 发出并行请求吗?
- python-3.x - 如何使用请求库为表单参数构造 JSON 请求?
- amazon-web-services - 仅当项目不存在时如何在 dynamodb 中放置项目
- drag-and-drop - Angular8 拖放无需任何外部插件
- java - 在 Survey Monkey 中获取完整的调查回复
- c# - 在特定条件下拆分字符串