繁体   English   中英

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

[英]PowerShell Winforms Textbox updates on other input but overwriteable

下午都

我想相信这很简单,但是碰壁了却不知道为什么。 我有一个PowerShell winform,它将通过模板创建一个新的用户帐户。 我现在正在研究的领域之一是生产线经理。 找到模板帐户后,请自动填写线路管理器字段,但如果不正确,则可以将其覆盖。
对于我一直在使用的预填充内容:

$FORMCONTROL.Add_TextChanged( {

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

下面的代码是我正在使用的简化版本。 该功能允许查找用户帐户并填充“只读”框。

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()

我似乎通过编辑Function TemplateUser修复了该问题:

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  } }

勋爵一开始就知道我在做什么错,因为没有保存更改。

@ TheIncorrigible1-好奇知道格式化的含义。 真的。 有没有更有效的书写方式? 我知道完成后该脚本将变得非常庞大,因此,如果我使用不必要的代码,我会不胜枚举。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM