PowerShell Winforms文本框更新其他输入但可覆盖

时间:2018-05-03 14:24:34

标签: winforms powershell

下午所有,

我想相信这个很容易,但撞墙而无法弄清楚原因。 我有一个PowerShell winform,它将从模板创建一个新的用户帐户。我现在正在研究的一个领域是直线经理;找到模板帐户后,自动填充行管理器字段,但如果这不正确,则允许覆盖它。
对于我一直在使用的预先填充的东西:

$FORMCONTROL.Add_TextChanged( {

但是,一旦找到模板并且也写了行管理器字段,我就无法覆盖它。我是否应该使用另一个事件来填充框,但允许我删除内容并添加其他内容?

以下代码是我正在使用的内容的缩减版。这些函数允许查找用户帐户并填充ReadOnly框。

Function FindUser {
  IF ( $SEARCHUSER -like $NULL -or $SEARCHUSER -like " *" )
     { } 
  ELSEIF ( $ACCOUNT = dsquery user -samid $SEARCHUSER )
     { $ACCOUNT     = Get-ADUser $SEARCHUSER -Property * }
  ELSEIF ( $ACCOUNT = Get-ADUser -Filter { mail -eq $SEARCHUSER } -ea sil )
     { $ACCOUNT     = Get-ADUser -Filter { mail -eq $SEARCHUSER } -Property * }
  ELSEIF ( dsquery user -name $SEARCHUSER )
     { $ACCOUNT     = Get-ADUser -Filter { name -eq $SEARCHUSER } -Property * }
  ELSE
     { $( foreach ( $SEARCHUSER in ( Get-ADUser -Filter { ( Surname -like $SEARCHUSER ) -and ( Enabled -eq $TRUE ) 
                    } -Properties Mail, Department, Office | sort Name ) )
                  { $SEARCHUSER | Select Name, @{ N = "Username" ; E = { $_.SamAccountName } }, Mail, Department, Office
                  } ) | Out-GridView -Title 'Select the user account' -OutputMode Single | %{
          TRY
              { $ACCOUNT = Get-ADUser $_.UserName -Property * }
          CATCH
              { } } }

  IF ( ( $ACCOUNT.SamAccountName ).count -eq 1 )
     { $Script:ACCOUNT = $ACCOUNT }
  ELSE
     { $Script:ACCOUNT = $NULL } }


Function TemplateUser {
  IF ( $ACCOUNT -ne $NULL )
     { $TAB1TEMPLATE_5.Text = ( $ACCOUNT.Name ) }

  ELSEIF ( $TAB1TEMPLATE_3.Text.Length -lt 4 )
     { $TAB1TEMPLATE_5.Text = $NULL  } }


# Creates the parent form and controls
$SDC                       = New-Object System.Windows.Forms.Form
$SDC.Location              = New-Object System.Drawing.Size( 270,175 )
$SDC.Size                  = New-Object System.Drawing.Size( 900,600 )
$SDC.StartPosition         = "CenterScreen"
$SDC.BackColor             = "Lavender"
$SDC.Font                  = "Calibri, 8.5"
$SDC.FormBorderStyle       = "Fixed3D"


#Tab 1 Template Account Label
$TAB1TEMPLATE_2            = New-Object System.Windows.Forms.Label
$TAB1TEMPLATE_2.Location   = '35,90'
$TAB1TEMPLATE_2.Size       = '200,20'
$TAB1TEMPLATE_2.Font       = New-Object System.Drawing.Font( "Calibri",10,[System.Drawing.FontStyle]::Bold ) 
$TAB1TEMPLATE_2.Text       = "Who are we using as a template?"
$SDC.Controls.Add( $TAB1TEMPLATE_2 )

#Tab 1 Template Textbox
$TAB1TEMPLATE_3            = New-Object System.Windows.Forms.TextBox
$TAB1TEMPLATE_3.Location   = '20,115'
$TAB1TEMPLATE_3.Size       = '200,20'
$TAB1TEMPLATE_3.Font       = New-Object System.Drawing.Font( "Calibri",9 )
$SDC.Controls.Add( $TAB1TEMPLATE_3 )

#Tab 1 Template Textbox - When hit Return
$TAB1TEMPLATE_3.Add_KeyDown( { 
    IF ( $_.KeyCode -eq 'Enter' )
       { $SEARCHUSER = $TAB1TEMPLATE_3.Text ; FindUser ; TemplateUser } } )

#Tab 1 Template Account's Full Name
$TAB1TEMPLATE_5            = New-Object System.Windows.Forms.TextBox
$TAB1TEMPLATE_5.Location   = '20,150'
$TAB1TEMPLATE_5.Size       = '200,20'
$TAB1TEMPLATE_5.ReadOnly   = $TRUE
$TAB1TEMPLATE_5.Font       = New-Object System.Drawing.Font( "Calibri",9 )
$SDC.Controls.Add( $TAB1TEMPLATE_5 )



#Tab 1 Line Manager Label
$TAB1MANAGER_2             = New-Object System.Windows.Forms.Label
$TAB1MANAGER_2.Location    = '35,400'
$TAB1MANAGER_2.Name        = "Manager"
$TAB1MANAGER_2.Size        = '245,20'
$TAB1MANAGER_2.Font        = New-Object System.Drawing.Font( "Calibri",10,[System.Drawing.FontStyle]::Bold ) 
$TAB1MANAGER_2.Text        = "Line Manager"
$SDC.Controls.Add( $TAB1MANAGER_2 )

#Tab 1 Line Manager Textbox
$TAB1MANAGER_3             = New-Object System.Windows.Forms.TextBox
$TAB1MANAGER_3.Location    = '20,420'
$TAB1MANAGER_3.Size        = '245,20'
$TAB1MANAGER_3.Name        = "Manager"
$TAB1MANAGER_3.Font        = New-Object System.Drawing.Font( "Calibri",9 ) 
$SDC.Controls.Add( $TAB1MANAGER_3 )
$TAB1MANAGER_3.Text        = $( If ( $TAB1TEMPLATE_3.text -eq $NULL ) { "hi" } )

$SDC.ShowDialog()

1 个答案:

答案 0 :(得分:0)

我似乎已经通过编辑功能模板用户修复了它:

Function TemplateUser {
  IF ( $ACCOUNT -ne $NULL )
     { $TAB1TEMPLATE_5.Text = ( $ACCOUNT.Name )
       $TAB1MANAGER_3.Text  = ( Get-ADUser $ACCOUNT.Manager ).Name
        }

  ELSEIF ( $TAB1TEMPLATE_3.Text.Length -lt 4 )
     { $TAB1TEMPLATE_5.Text = $NULL  } }

Lord首先知道我做错了什么,因为没有保存更改。

@TheIncorrigible1 - 很想知道你的格式是什么意思。真的。有更有效的写作方式吗?我知道完成后这个脚本会非常大,所以如果我使用不必要的代码我就会全力以赴。