我编写了以下程序来查找 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/