vb.net - 使用 VB.NET 循环遍历 ListBox 控件中的每个项目

标签 vb.net ldap

我编写了以下程序来查找 LDAP 用户并返回属性。我需要它工作的方式如下:首先,我将用户 ID 列表加载到 ListBox1 中。 ,然后当我单击按钮时,属性(例如 DisplayName)将被附加到 ListBox2 。现在我必须单击 ListBox1 中的一个项目然后单击按钮,它就可以工作,但我希望它循环遍历 ListBox1 中的每个 ID并将它们的属性全部写入 ListBox2我无需点击每个用户 ID。如何将以下内容放入 foreach 循环中?

Dim de As New DirectoryEntry("LDAP://test.com/DC=test,DC=com")
Dim LdapFilter As String = "(sAMAccountName=" & ListBox1.Text & ")"
Dim searcher As New DirectorySearcher(de, LdapFilter)
Dim result As SearchResult = searcher.FindOne()
ListBox2.Items.Add(result.Properties("displayName")(0).ToString())

更新

我尝试使用ListView按照建议显示两列。然而,它不起作用。它只是添加 ListView栏目:

Dim item As ListViewItem = ListView1.Items.Add("Username")
Dim item1 As ListViewItem = ListView1.Items.Add("Title")
For Each i As String In ListBox1.Items
    Dim de As New DirectoryEntry("LDAP://test.com/DC=test,DC=com")
    Dim LdapFilter As String = "(sAMAccountName=" & i & ")"
    Dim searcher As New DirectorySearcher(de, LdapFilter)
    Dim result As SearchResult = searcher.FindOne()
    item.SubItems.Add(result.Properties("sAMAccountName")(0).ToString())
    item1.SubItems.Add(result.Properties("title")(0).ToString())
    Dim ADEntry As DirectoryEntry = New DirectoryEntry(result.Path)
    If result.Properties("displayName") Is Nothing Then
        On Error Resume Next
    End If
Next

最佳答案

您实际上不应该使用ListBox1.Text 属性。这是相当令人困惑的。在本例中,您希望循环遍历 ListBox1.Items 列表中的所有字符串(假设它们实际上是字符串)。例如:

For Each i As String in ListBox1.Items
    Dim de As New DirectoryEntry("LDAP://test.com/DC=test,DC=com")
    Dim LdapFilter As String = "(sAMAccountName=" & i & ")"
    Dim searcher As New DirectorySearcher(de, LdapFilter)
    Dim result As SearchResult = searcher.FindOne()
    ListBox2.Items.Add(result.Properties("displayName")(0).ToString())
Next

或者,如果 ListBox1 实际上不包含字符串,您可以将它们作为 Object 进行循环,并对每个字符串调用 ToString 方法,像这样:

For Each i As Object in ListBox1.Items
    Dim de As New DirectoryEntry("LDAP://test.com/DC=test,DC=com")
    Dim LdapFilter As String = "(sAMAccountName=" & i.ToString() & ")"
    Dim searcher As New DirectorySearcher(de, LdapFilter)
    Dim result As SearchResult = searcher.FindOne()
    ListBox2.Items.Add(result.Properties("displayName")(0).ToString())
Next

正如我在下面的评论中提到的,最好使用具有两列的 ListView 控件,而不是使用两个单独的 ListBox 控件。例如,如果您有一个包含三列(标题为“ID”、“用户名”和“标题”)的 ListView1 控件,那么您可以添加如下项目:

Dim userIds As IEnumerable(Of String) = getAllLdapUserIds()  ' Get the list of ID's using whatever means you are currently using
For Each i As String In userIds
    Dim de As New DirectoryEntry("LDAP://test.com/DC=test,DC=com")
    Dim LdapFilter As String = "(sAMAccountName=" & i & ")"
    Dim searcher As New DirectorySearcher(de, LdapFilter)
    Dim result As SearchResult = searcher.FindOne()
    Dim item As ListViewItem = ListView1.Items.Add(i)
    item.SubItems.Add(result.Properties("sAMAccountName")(0).ToString())
    item.SubItems.Add(result.Properties("title")(0).ToString())
Next

关于vb.net - 使用 VB.NET 循环遍历 ListBox 控件中的每个项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26613911/

相关文章:

c# - 以编程方式限制外部进程资源

java - 如何在 Java 中将 YMD LDAP 时间戳转换为日期时间?

vb.net 无法将 Dictionary(Of String, List(Of String)) 转换为对象

mysql - 无法调试 Windows 窗体程序

database - 在 Microsoft Access 中导入 mp3 文件元数据

php - WAMP 上的 LDAP 身份验证

python - 使用python Django测试ldap连接

c# - 无法使用 LDAP 验证凭据

c# - LDAPS 连接出现未知错误 (0x80005000)

.net - Windows 窗体处理程序在计算机唤醒时被忽略