2017-05-06 7 views
0

ボタンをクリックしたときに、以下のコードを使用して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

イベント引数を見てください.1つはクリックされたボタンである「送信者」です。 – Plutonix

+0

送信者paramは、クリックイベントを発生させたボタンです。型は、送信者をボタンオブジェクトにキャストし、ヘルパーメソッドで設計して渡すときにProperty値を抽出します。 – Gururaj

答えて

0

このようなものです。私はボタンの実際の名前を推測しており、すべてのクリックに対して1つのハンドラしか使用していないことに注意してください。

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(送信者、ボタン).Name'が欠けていました。 –