【问题标题】:How to declare a variable depending on user input in visual basic如何根据 Visual Basic 中的用户输入声明变量
【发布时间】:2021-10-28 20:18:02
【问题描述】:

我想创建一个程序,用户将在文本框中输入一个数字,并且该程序将根据他/她按下提交按钮时的数字创建许多变量。 (Windows 窗体)

例如,用户将在文本框中输入 3,当他/她按下提交按钮时,程序将在程序内部创建一个标记为 length1,length2,length3 的变量作为 int,以便以后用于其他目的。

【问题讨论】:

  • 既然提到了Windows Forms,我推测使用的语言是vb.net?如果是这样,vb6 是一种不同但相似的语言,解决方案会有所不同。请编辑标签以反映实际使用的语言。
  • 你不能真正创建这样的变量。最简单的解决方案是使用Dictionary,例如Dictionary(Of String, Int)。变量名“length1”、“length2”等将是 KEY,与变量名关联的 Int 将是 VALUE。将字典存储在表单/类级别,以便可以从任何地方访问它。如果您需要它对您的整个程序是全局的,那么在模块中将其声明为 Public。
  • 为什么不像这样创建一个数组:Dim lengths%(CInt(TextBox1.Text))

标签: vb.net variables declaration


【解决方案1】:

尝试创建这样的列表:

Private Numbers As New List(Of Number)

Private Class Number
       Public Name As String
       Public Value As Integer
End Class

接下来创建一个将整数和名称添加到列表中的过程:

Private Sub AddNumbers()
       If IsNumeric(textbox1.Text) = false Then
           Exit Sub
       End If
       For i = 1 to Convert.ToInt32(textbox1.Text)
           Numbers.Add(New Number With {.Name = "length" & i, .Value = 0})
       Next
End Sub

我假设文本框被称为 textbox1。然后你可以像这样从提交按钮调用 AddNumbers 子:

AddNumbers()

您可以像这样从列表中检索一个数字:

Numbers(0).Value

【讨论】:

  • for 循环应该循环通过Textbox1.Text,而不是Textbox1.Text.Length。尽管这确实假设 Textbox1 将仅包含数字字符,但如果存在非数字字符,则现有代码可能会引发异常。虽然如果Option Strict 处于打开状态(应该打开),则会导致编译错误 - 在这种情况下,Textbox1.Text 需要转换为数字(整数?)。
  • vb.net 有几个针对 vb.net 优化的方法,例如 CIntCDec 等。
  • 如果你使用 Dictionary(Of String, Integer),你就不需要类了。
  • 在 .net 中,我们有 TryParse 方法来替换旧的 vb6 IsNumeric
【解决方案2】:

使用 List 创建多个 Integer 变量。

Public length As List(Of Integer)
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    For i = 1 To Convert.ToInt32(TextBox1.Text)
        length.Add(0)
    Next
End Sub

那么就可以通过length(0)获取变量了。

不要忘记将 TextBox 限制为只能输入数字和退格键。

Private Sub TextBox1_KeyPress(sender As Object, e As KeyPressEventArgs) Handles TextBox1.KeyPress
    If Char.IsDigit(e.KeyChar) Or e.KeyChar = Chr(8) Then
        e.Handled = False
    Else
        e.Handled = True
    End If
End Sub

【讨论】:

  • 当用户完成输入而不是检查每个按键时,TryParse 怎么样?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多