PowerShell RichTextBox ScrollToCaret
PowerShell RichTextBox ScrollToCaret
所以我对在 PowerShell 中构建表单还很陌生;我已经尝试过 Saipen PowerShell Studio 但无法继续使用它,所以我坚持使用 ICE 并自己完成所有繁重的工作 - 当我遇到以前从未见过的事情时,这可能会很痛苦。
在本例中,我有一个要自动滚动的 RichTextBox。我已经在整个互联网上看到了 C# 的 ScrollToCaret,并且 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()
在 WriteFile
函数中使用 ScrollToCaret
方法
Function WriteFile {
$LINES = gc $TAB1IMPORT
$TAB1TEXT.AppendText( "`nGet-Content $TAB1IMPORT" )
foreach ( $LINE in $LINES )
{ $TAB1TEXT.AppendText( "`n$LINE" )
$TAB1TEXT.ScrollToCaret() # here
Sleep 1 } }
edit - 我遇到过很多次,其中提供了 c#
解决方案但没有 PowerShell 语法。你和这个太接近了……我通过使用制表符完成找到了解决方案。
更好的方法是让用户 Get-Member
查看对象上可用的方法。这会列出 ScrollToCaret
并为您提供方法定义:
void ...
- return 什么都没有
...()
- 空括号所以不需要参数
$TAB1TEXT | Get-Member
一般在 Powershell 中使用 c# - helpful link
调用静态方法
[Class]::StaticMethod(args)
调用实例方法
$object.InstanceMethod(args)
获得属性
$object.Property
所以我对在 PowerShell 中构建表单还很陌生;我已经尝试过 Saipen PowerShell Studio 但无法继续使用它,所以我坚持使用 ICE 并自己完成所有繁重的工作 - 当我遇到以前从未见过的事情时,这可能会很痛苦。
在本例中,我有一个要自动滚动的 RichTextBox。我已经在整个互联网上看到了 C# 的 ScrollToCaret,并且 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()
在 WriteFile
函数中使用 ScrollToCaret
方法
Function WriteFile {
$LINES = gc $TAB1IMPORT
$TAB1TEXT.AppendText( "`nGet-Content $TAB1IMPORT" )
foreach ( $LINE in $LINES )
{ $TAB1TEXT.AppendText( "`n$LINE" )
$TAB1TEXT.ScrollToCaret() # here
Sleep 1 } }
edit - 我遇到过很多次,其中提供了 c#
解决方案但没有 PowerShell 语法。你和这个太接近了……我通过使用制表符完成找到了解决方案。
更好的方法是让用户 Get-Member
查看对象上可用的方法。这会列出 ScrollToCaret
并为您提供方法定义:
void ...
- return 什么都没有...()
- 空括号所以不需要参数
$TAB1TEXT | Get-Member
一般在 Powershell 中使用 c# - helpful link
调用静态方法
[Class]::StaticMethod(args)
调用实例方法
$object.InstanceMethod(args)
获得属性
$object.Property