【问题标题】:String array not accepting a string字符串数组不接受字符串
【发布时间】:2016-06-23 07:59:15
【问题描述】:

我正在尝试制作一个简单的登录程序,但在为我的两个数组“User()”和“Pass()”分配值时遇到了麻烦。我在标题为“frmCreate”的表单上有以下代码。这是我将用来创建帐户的表格。

Public Class frmCreate
Dim passs() As String
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles btnCreate.Click
    If Not (txtUser.Text = "") And Not (txtPass.Text = "") Then
        userCount = userCount + 1
        User(userCount) = txtUser.Text
        Pass(userCount) = txtPass.Text
    Else
        MsgBox("Please enter a username or password")
    End If
End Sub

Private Sub Button1_Click_1(sender As Object, e As EventArgs) Handles Button1.Click
    passs(0) = "hi"
End Sub
End Class

我遇到的问题如下: Error in array

txtPass 和 txtUser 都是文本框,用户可以编辑。

任何帮助将不胜感激! (此外,我尝试使用变量和所有变量,= 符号后的字符串不是问题,例如,当我将括号内的“userCount”设置为“0”时,它仍然返回相同的错误)

EDIT 将代码添加为文本,而不是图像(图像仍然存在)。请注意末尾的额外几行,我在其中设置了一个名为 pass() 的新数组为“hi”。暗淡也进一步上升。如果我错误地声明了我的变量,请告诉我。

EDIT2 好的,我将“User()”和“Pass()”的声明更改为 = {}。现在我的问题是我得到的错误是值超出了数组的范围。我知道当您尝试调用数组边界之外的不存在值时会发生这种情况,但我设置的数组没有边界,我只是想给它一个值,而不是调用一个值。

EDIT3 呃......好吧,稍微调整了一下,我发现如果我向“User()”添加一个未使用的值,那么它可以替换它。所以我可以让程序替换数组中已经存在的值,但我不能让它在数组中创建新值。

【问题讨论】:

  • 请将代码粘贴为格式正确的文本,但不要粘贴为图像。还有错误消息文本。
  • 如果你像这个问题一样从 1 开始数组?:stackoverflow.com/questions/24007320/…
  • 数组User 尚未实例化(当前为Nothing)。你只需要解决这个问题。
  • 谢谢你,但我还是很困惑。我知道数组“用户”什么都不是,但我该如何解决呢?我将它声明为:Public User() As String 所以它存在,但它仍然什么都不是??

标签: arrays vb.net visual-studio


【解决方案1】:

您的 User 变量似乎为 NULL。我想这是一个字符串列表或类似的东西?

你应该检查你初始化这个变量的地方,以确保它正在被创建......

你可以添加一个

If User Is Nothing

在函数开始处检查这一点,如果此时列表为空,则创建它。

【讨论】:

  • 谢谢米尔尼,你的意思是没有分配任何值?因为这就是我在这里要做的——为变量赋值。如果 null 表示变量不存在,那么我有问题。我在一个模块中声明了我的变量,在那里我将它们声明为公共:Public User() As String。事实上,当我运行程序时,它会在我的数组紫色下划线,当我将鼠标悬停在它上面时,它只是简单地说“Nothing”。我该如何解决这个问题?
  • 当变量为null 时,没有为其创建实例。在 VB 中检查某物是否为null 就像If variable Is Nothing 一样。它并不意味着列表中没有条目。这意味着没有列表
  • 如果您尝试将多个用户名添加到 User 变量中,则应将其声明为数组或字符串列表,而不仅仅是单个字符串。否则,如果您只是尝试存储单个用户名,您将使用 User = xxx 而不是 User(userCount)。
  • 它被声明为一个数组:Public User() As String 除非我对如何声明数组的理解已经过时/不正确?这很奇怪,因为如果我将数组设置为具有两个值,例如,Public User() As String = {"val1", "val2"} 那么它设置用户名和密码两次就好了。但是在它超过了我没有手动给数组任何值的点之后,它遇到了一个null 值。
【解决方案2】:

我发现我做错了什么。看,我想当我用空括号声明一个变量时,它创建了一个 dynamic 变量。显然情况并非如此。由于将变量的大小设置为 50,000 的可笑大小,我的程序现在可以工作了。感谢所有试图提供帮助的人,很抱歉问错了:/

【讨论】:

  • 如果您不知道要添加多少项目,请改用List(of T)
【解决方案3】:

您的问题是您只定义了变量数组。您从未为内存中的数组值保留位置。因此,您的变量的值为Nothing

在分配第一个项目之前,您必须为其分配空间...

'We say we want an array
Dim passs() As String
'We ask the memory to reserve six spots for our array
passs = New String(5) {}

'We assign the first spot to the String "hi"
passs(0) = "hi"

但是,如果您不知道要在数组中添加多少项,我强烈建议您改用 List(of T)

Dim passs As New List(of String)

passs.Add("hi")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-02
    • 2017-08-11
    相关资源
    最近更新 更多