将按钮名称传递到函数

问题描述:

我使用下面的代码在单击按钮时清除Active Directory中的用户属性。我有几个按钮(标题,部门,地址,城市,州,邮编,国家,电话各1个)。对于8个按钮点击中的每一个,我都可以使用相同的代码。不过,我想这可能是更清洁,减少代码量,通过每个按钮单个子例程的名称,所以你只需要一次,而不是8次,然后用将按钮名称传递到函数

dirEntryResults.Properties("btnName").Clear() 

但是,我看不出是否可以将按钮名称传递给子例程?这是可能的,如果是的话,如何?

Private Sub ClearTitle_Click(sender As Object, e As EventArgs) Handles ClearTitle.Click 
    Dim ADName As String = GetLogonName() 
    Dim dirEntry As DirectoryEntry = GetDirectoryEntry() 
    Dim dirSearcher As DirectorySearcher = New DirectorySearcher(dirEntry) 
    dirSearcher.Filter = "(&(objectClass=user)(objectCategory=person)(sAMAccountName=test.account))" 
    dirSearcher.SearchScope = SearchScope.Subtree 
    Dim searchResults As SearchResult = dirSearcher.FindOne() 
    If Not searchResults Is Nothing Then 
     Dim dirEntryResults As New DirectoryEntry(searchResults.Path) 
     dirEntryResults.Properties("title").Clear() 
     dirEntryResults.CommitChanges() 
     dirEntryResults.Close() 
     MsgBox("Attribute Cleared", MsgBoxStyle.OkOnly, "Success") 
    End If 
    dirEntry.Close() 
End Sub 
+0

查看事件参数 - 其中一个是发件人,它是单击的按钮。 – Plutonix

+0

发件人参数是触发点击事件的按钮。您可以将发件人转换为按钮对象,并在设计时提取Property值并将其传递给helper方法。 – Gururaj

就是这样。请注意,我正在猜测按钮的实际名称,并且只对所有的点击使用一个处理程序。

Private Sub Clears_Click(sender As Object, e As EventArgs) Handles ClearTitle.Click, ClearAddress.Click, ClearCity.Click 'etc 

    Dim BTN_NAME As String = DirectCast(sender, Button).Name.ToLower.Replace("clear", "") 

    Dim ADName As String = GetLogonName() 
    Dim dirEntry As DirectoryEntry = GetDirectoryEntry() 
    Dim dirSearcher As DirectorySearcher = New DirectorySearcher(dirEntry) 
    dirSearcher.Filter = "(&(objectClass=user)(objectCategory=person)(sAMAccountName=test.account))" 
    dirSearcher.SearchScope = SearchScope.Subtree 
    Dim searchResults As SearchResult = dirSearcher.FindOne() 
    If Not searchResults Is Nothing Then 
     Dim dirEntryResults As New DirectoryEntry(searchResults.Path) 

     dirEntryResults.Properties(BTN_NAME).Clear() 

     dirEntryResults.CommitChanges() 
     dirEntryResults.Close() 
     MsgBox("Attribute Cleared", MsgBoxStyle.OkOnly, "Success") 
    End If 
    dirEntry.Close() 
End Sub 
+0

谢谢,这工作!我越来越接近,我发现另一篇文章,建议添加'Dim btnName As String'和另一个说'Dim addedButton As Button = sender',但都抛出关于不能将按钮转换为字符串的错误。它缺少你建议的额外的'DirectCast(sender,Button).Name'。 –