PowerShell RichTextBox ScrollToCaret

时间:2018-01-04 10:45:05

标签: winforms powershell richtextbox

所以我在PowerShell中构建表单相当新;我已经尝试过Saipen PowerShell Studio而且无法继续使用它所以我坚持ICE并且自己做了所有繁重的工作 - 当我遇到一些事情时这可能是一种痛苦我&# 39;从未见过。
在这种情况下,我有一个RichTextBox,我想自动滚动。我已经在互联网上看到了ScrollToCaret用于C#,而Saipen论坛建议使用它,但在这两种情况下都没有提供完整的PS代码,所以我不知道在哪里放它。无论我在哪里尝试过,我都无法到达任何地方。

任何帮助都会非常感激。我还会就我是否有效地做事情提出一般建议。是的,我知道GUI很难看,只是因为它缺少了与这个问题无关的所有东西。

# Adds .NET assemby's and turns on visual themes in standard PowerShell.
Add-Type -AssemblyName System.Drawing
Add-Type -AssemblyName System.Windows.Forms
[System.Windows.Forms.Application]::EnableVisualStyles()


Function OpenFileDialog { 
  [System.Reflection.Assembly]::LoadWithPartialName( "System.Windows.Forms" ) | Out-Null
  $OBJFORM           = New-Object System.Windows.Forms.OpenFileDialog
  $OBJFORM.Filter    = "Text files (*.txt)|*.txt"
  $TXTIMPORT         = $OBJFORM.ShowDialog()

  IF ( $TXTIMPORT -eq "OK" )
     { Return $OBJFORM.FileName } }

 Function WriteFile {
   $LINES  = gc $TAB1IMPORT
   $TAB1TEXT.AppendText( "`nGet-Content $TAB1IMPORT" )

   foreach ( $LINE in $LINES )
           { $TAB1TEXT.AppendText( "`n$LINE" )
             Sleep 1 } }



# 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"

$TABC                 = New-Object System.Windows.Forms.TabControl
$TABC.Location        = New-Object System.Drawing.Size( 140,20 )
$TABC.Size            = New-Object System.Drawing.Size( 720,520 )
$TABC.SizeMode        = "Fixed"
$SDC.Controls.Add( $TABC )

# Tab controls
$TAB1                 = New-Object System.Windows.Forms.TabPage
$TAB1.Location        = New-Object System.Drawing.Size( 20,20 )
$TAB1.Size            = New-Object System.Drawing.Size( 100,100 )
$TAB1.Text            = "Migrate Users"
$TABC.Controls.Add( $TAB1 )

#Tab open file button
$TAB1BUTTON           = New-Object System.Windows.Forms.Button
$TAB1BUTTON.Location  = New-Object System.Drawing.Size( 50,270 )
$TAB1BUTTON.Size      = New-Object System.Drawing.Size( 80,20 ) 
$TAB1BUTTON.Text      = "File Import"
$TAB1.Controls.Add( $TAB1BUTTON )

$TAB1BUTTON.Add_Click( { $TAB1IMPORT    = OpenFileDialog
                         $TAB1TEXT.Text = $TAB1TEXT.Text.Clear
                         $TAB1TEXT.AppendText( "PS H:\>$TAB1IMPORT" )
                         WriteFile } )

#Tab 1 Text Box
$TAB1TEXT             = New-Object System.Windows.Forms.RichTextBox
$TAB1TEXT.Location    = New-Object System.Drawing.Size( 50,300 )
$TAB1TEXT.Size        = New-Object System.Drawing.Size( 615,180 )
$TAB1TEXT.Font        = New-Object System.Drawing.Font( "Consolas",10,[System.Drawing.FontStyle]::Bold ) 
$TAB1TEXT.BackColor   = "Black"
$TAB1TEXT.ForeColor   = "White"
$TAB1TEXT.Multiline   = $TRUE
$TAB1TEXT.Text        = "PS H:\>"
$TAB1TEXT.BorderStyle = "FixedSingle"
$TAB1.Controls.add( $TAB1TEXT )


$SDC.Add_Shown( { $SDC.Activate() } )
$SDC.ShowDialog()

1 个答案:

答案 0 :(得分:2)

使用ScrollToCaret功能

中的WriteFile方法
 Function WriteFile {
   $LINES  = gc $TAB1IMPORT
   $TAB1TEXT.AppendText( "`nGet-Content $TAB1IMPORT" )

   foreach ( $LINE in $LINES )
           { $TAB1TEXT.AppendText( "`n$LINE" )
             $TAB1TEXT.ScrollToCaret()             # here
             Sleep 1 } }

编辑 - 我已多次遇到提供c#解决方案但没有PowerShell语法的情况。你是如此接近这个...我通过使用tab-complete来解决问题。

更好的方法是让用户Get-Member查看对象上可用的方法。这会列出ScrollToCaret并为您提供方法定义:

  • void ... - 不会返回任何内容
  • ...() - 空括号因此不带参数

$TAB1TEXT | Get-Member

List of $ATABTEXT members

一般来说,

c#在Powershell中 - helpful link

调用静态方法

[Class]::StaticMethod(args)

调用实例方法

$object.InstanceMethod(args)

获取财产

$object.Property