首页 > 解决方案 > 根据 AD 用户结果显示/隐藏用于电子邮件输入的文本框

问题描述

我仍然是一个 VB Noob,我在让它正常工作时遇到了一些麻烦。代码看起来应该可以工作,但我显然遗漏了一些东西......

我要做的是DirectoryServices在表单加载时获取用户的电子邮件地址,如果没有可用的 AD 用户电子邮件,则显示(取消隐藏)一个文本框以允许用户输入他们的电子邮件地址。我所拥有的将从 AD 中提取用户电子邮件,但如果 Directy 服务不可用,则不会显示文本框。我已经尝试移动UserEmailAdd.Visible = FalselblEmail.Visible = False表单加载并将值设置为 True,但我运气不佳

这是我到目前为止所拥有的:

    Private Sub FormTicket_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    Me.CenterToScreen()
    BtnSCR.Hide()
    LblScreenshot.Hide()

    'Get current users email address from AD or input
    Dim currentADUser As System.DirectoryServices.AccountManagement.UserPrincipal
    currentADUser = System.DirectoryServices.AccountManagement.UserPrincipal.Current
    Dim userEmail = currentADUser.EmailAddress

    If currentADUser IsNot Nothing Then
        ' user exists
        LblEmail.Visible = False
        UserEmailAdd.Visible = False
        txtSummary.Focus()
        MailUser = userEmail
        'Catch ex As Exception
    Else
        ' user does *not* exist
        UserEmailAdd.Visible = True
        LblEmail.Visible = True
        UserEmailAdd.Focus()
        MailUser = UserEmailAdd.Text
        'End Try
    End If

标签: vb.net

解决方案


因此,经过一些测试(反复试验),我能够完成这项工作。这可能不是最好的方法,但它现在适合我的目的,我将继续努力清理它。

我确定是否有本地域以及用户是否有帐户和电子邮件地址。如果是这样,我用这个值填充了UserEmailAdd文本框,并隐藏了标签和字段。如果没有找到本地域/用户,则标签和文本框将被取消隐藏,用户现在可以输入他们的电子邮件地址,这两种情况下都提供了用户mail.From地址。

这是我所做的:

    Try
        ' check if domain user exists
        Dim currentADUser As System.DirectoryServices.AccountManagement.UserPrincipal
        currentADUser = System.DirectoryServices.AccountManagement.UserPrincipal.Current
        Dim userEmail = currentADUser.EmailAddress
        If currentADUser.EmailAddress IsNot Nothing Then
            LblEmail.Hide() 
            UserEmailAdd.Hide() 
            UserEmailAdd.Text = userEmail
            txtSummary.Focus()
        End If
    ' local domain user does not exist
    Catch ex As Exception
        UserEmailAdd.Show() 
        LblEmail.Show() 
        UserEmailAdd.Focus()
    End Try
 ...

    mail.From = New MailAddress(UserEmailAdd.Text)

jmcilhinney,感谢您激发我的更多思考。我显然不是任何类型的程序员,我还有很多东西要学。但是你的评论帮助我重新审视这个问题并找出不同的方式。


推荐阅读