文本框中的连字符后面的文本不会从vb listview填充

时间:2017-12-05 15:50:19

标签: asp.net vb.net

我正在开发一个ASPX VB.NET Web应用程序,它允许您从作业标题列表中进行搜索,当您选择作业标题并单击添加按钮时,它会将作业标题添加到名为tbJobTitle的文本框中。

问题在于,当有一个带有连字符的作业标题时,只有标题的第一部分被传递给tbJobTitle,例如,如果你有一个名为1234--admin assistant - IT admin的职位名称作为职位名称,那么admin assistant被发送到tbJobTitle文本框。我需要将整个内容传递给tbJobTitle文本框。

这是我的.vb代码:

Private Sub btnAddTitle_Click(sender As Object, e As EventArgs) Handles btnAddTitle.Click 
    For Each item As ListItem In lbJobTitle.Items
        If item.Selected Then
            If Not lbTitles.Items.Contains(item) Then
                lbTitles.Items.Add(item)
                Dim str As String = lbTitles.SelectedItem.Text
                Dim strArr As String() = Nothing
                Dim splitchar As Char() = {"--"}
                strArr = str.Split(splitchar)
                tbJobTitle.Text = strArr(2)
            End If
        End If
End Sub

1 个答案:

答案 0 :(得分:1)

这是因为microsoft决定将option strict设置为off作为默认值。因此,每个新开发人员都会遇到如此丑陋的错误。通常这会产生编译器错误。为什么呢?

因为这无效:

Dim splitchar As Char() = {"--"} 

您正在使用单个Char()初始化String。有效的是这个(注意"-"c):

Dim splitchar As Char() = {"-"c} ' this will split by a single hyphen

现在,如果Option Strict设置为Off会发生什么?它会编译并引入一个更糟糕的bug。它将默默地获取字符串的第一个字符并使用它。所以你实际得到这个数组:

Dim splitchar As Char() = {"-"c} ' this will split by a single hyphen

这不是你想要的。这就是你想要的(注意String()):

Dim splitStrings As String() = {"--"} ' this will split by  double hyphen
strArr = str.Split(splitStrings, StringSplitOptions.None))

您需要the overload of String.Split String()StringSplitOptions

我强烈建议您将Option Strict设置为On并学习编写类型安全且干净的代码。

这是一个演示整个混乱的课程:

Option Strict Off

Public Class OptionStrictDemo
    Shared sub ShowMess()
        Dim aChar As Char = "f"c
        Dim otherChar As Char = "foo"
        Dim isMess = aChar = otherChar
        Console.Write("Is it a mess? " & if(isMess, "yes", "no")) ' Is it a mess? yes
    End sub
End Class

如果您设置Option Strict On(更好地将其设置为默认值),您将收到编译器错误。