我有一个活动售票的vb项目,最后我需要为每次购买保存一个文本文件。
我有选项卡控件,在最后,所有需要进入文本文件(事件和客户)的数据都在一个选项卡中
我有这样的代码,它将读取每个文本框中的文本,现在为了测试目的,它会抛出一个带有值的消息框。它是有效的,唯一的是,它以奇怪的顺序显示值,我不知道如何以所需的顺序读取它们。(如果我能在文本框之前添加标签,也不会有什么坏处。text,但我没有那么贪婪:)
For Each GenericControl In TabPurchaseTickets.Controls
If TypeOf GenericControl Is System.Windows.Forms.TextBox Then
Dim tb As TextBox = DirectCast(GenericControl, TextBox)
MsgBox(tb.Text)
End If
Next
在将这些文本框写入文件之前,您需要有一些东西来帮助您识别这些文本框及其值
在将来的应用程序修订中,依赖tabcontrol上文本框的顺序将是一个巨大的错误。如果您需要更改该顺序,较旧的文件将导致"版本控制"问题。
您可以在设计时为每个文本框定义Tag属性,使用一个值来帮助您识别它们,并使用标记值、分隔符和文本框值编写文件
Dim sb = new StringBuilder()
For Each GenericControl In TabPurchaseTickets.Controls.OfType(Of TextBox)
Dim tb As TextBox = DirectCast(GenericControl, TextBox)
sb.AppendFormat("{0};{1}", tb.Tag, tb.Text)
sb.AppendLine()
Next
现在将StringBuilder.ToString写入您的文本文件,您将得到类似于以下的内容
Name;John
Surname;McInroe
Sport;Tennis
....
通过这种方式,你可以随心所欲地更改文本框的顺序,因为每个值都与Tag属性相关,你可以很容易地重新加载它。
当然,这只是一个例子,我建议您研究使用适当的数据库系统,而不是简单的文件。
这是一个非常丑陋的解决方案,但它确实有效。不幸的是,在这个项目中,这太多了!:D
感谢标签的想法,很高兴发现还有另一个字段可以在文本框中"存储"文本。
无论如何,这是bodge代码*注意,msgbox只是用于测试输出,稍后会修改它以保存在文本文件中:
标注标签(15)为字符串Dim字段(15)作为字符串
For Each GenericControl In TabPurchaseTickets.Controls.OfType(Of TextBox)()
Dim tb As TextBox = DirectCast(GenericControl, TextBox)
fields(tb.TabIndex) = tb.Text
labels(tb.TabIndex) = tb.Tag
Next
For i As Integer = 0 To 15
MsgBox(labels(i) & ": " & fields(i))
Next