arduino
Goto Top

Powershell .Net Form auto Scrolldown

Moin

Folgendes Szenario: eine kleine Form mit einer multiline Textbox. In dem vereinfachten Beispiel wird jedes Mal eine Zeile hinzugefügt. Das Ziel wäre jetzt, dass das Fenster automatisch runterscrollt, wenn der Text länger wird. Hat jemand eine Idee, wie ich das machen kann?

Vielen Dank
Gruess
Arduino

Function Do-Something
{
    $ObjTextBox.Text = $ObjTextBox.Text + "`r`nnoch mehr intelligenter Text"  
}

[Void] [System.Reflection.Assembly]::LoadWithPartialName(“System.Drawing”)
[Void] [System.Reflection.Assembly]::LoadWithPartialName(“System.Windows.Forms”)
$objForm = New-Object System.Windows.Forms.Form 
$ObjForm.Add_Shown({$ObjForm.Activate()})
$ObjForm.Controlbox = $False
$ObjForm.FormBorderStyle = 'Fixed3D'  
$objForm.MinimizeBox = $False
$objForm.MaximizeBox = $False
$objForm.Size = New-Object System.Drawing.Size(390,330)
$objForm.StartPosition = “CenterScreen”
$objForm.Text = “Text coming soon”

$objForm.KeyPreview = $True
$objForm.Add_KeyDown({If ($_.KeyCode -eq “Enter”) { Do-Something } })
$objForm.Add_KeyDown({If ($_.KeyCode -eq “Escape”) { $objForm.Close()} })

$ObjButton = New-Object Windows.Forms.Button
$ObjButton.Add_Click({ Do-Something })
$ObjButton.Text = "do something"  
$ObjButton.Location = New-Object Drawing.Point(10,10)
$ObjForm.Controls.Add($ObjButton)

$ObjTextBox = New-Object System.Windows.Forms.TextBox
$ObjTextBox.Location = New-Object System.Drawing.Size(10,40)
$ObjTextBox.Size = New-Object System.Drawing.Size(360,250)
$ObjTextBox.Multiline = $True
$ObjTextBox.ScrollBars = 'Both'  
$ObjTextBox.Text = "Hier kommt noch ein intelligenter Text rein"  
$ObjTextBox.Readonly = $True
$ObjForm.Controls.Add($ObjTextBox)

[Void]$objForm.ShowDialog()

Content-ID: 296557

Url: https://administrator.de/forum/powershell-net-form-auto-scrolldown-296557.html

Ausgedruckt am: 22.12.2024 um 19:12 Uhr

colinardo
Lösung colinardo 17.02.2016, aktualisiert am 25.02.2016 um 16:39:42 Uhr
Goto Top
Hallo @arduino,
kein Problem hier eine Demo:
(Das essentielle zum Scrollen ans Ende einer MultiLine-Textbox steht in Zeile 23 und 25)
function GenerateForm {

#region Import the Assemblies
[reflection.assembly]::loadwithpartialname("System.Windows.Forms") | Out-Null  
[reflection.assembly]::loadwithpartialname("System.Drawing") | Out-Null  
#endregion

$form1 = New-Object System.Windows.Forms.Form
$btnAddLine = New-Object System.Windows.Forms.Button
$txt2 = New-Object System.Windows.Forms.TextBox
$txt1 = New-Object System.Windows.Forms.TextBox
$InitialFormWindowState = New-Object System.Windows.Forms.FormWindowState

$handler_btnAddLine_Click= 
{
    # Zeile zur Multiline.Textbox hinzufügen
    $txt1.AppendText($txt2.Text  + "`r`n")  
}

$handler_txt1_TextChanged= 
{
    # Cursor bei Änderung in der Textbox an Ende setzen 
    $txt1.SelectionStart = $txt1.Text.Length
    # scrolle zur Cursorposition in der Textbox die sich ja jetzt am Ende befindet
    $txt1.ScrollToCaret()
}
$OnLoadForm_StateCorrection=
{#Correct the initial state of the form to prevent the .Net maximized form issue
	$form1.WindowState = $InitialFormWindowState
}

#----------------------------------------------
#region Generated Form Code
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 221
$System_Drawing_Size.Width = 250
$form1.ClientSize = $System_Drawing_Size
$form1.DataBindings.DefaultDataSourceUpdateMode = 0
$form1.Name = "form1"  
$form1.Text = "Scrolling Textbox"  
$btnAddLine.Anchor = 10

$btnAddLine.DataBindings.DefaultDataSourceUpdateMode = 0

$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 183
$System_Drawing_Point.Y = 178
$btnAddLine.Location = $System_Drawing_Point
$btnAddLine.Name = "btnAddLine"  
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 23
$System_Drawing_Size.Width = 55
$btnAddLine.Size = $System_Drawing_Size
$btnAddLine.TabIndex = 1
$btnAddLine.Text = "Add line"  
$btnAddLine.UseVisualStyleBackColor = $True
$btnAddLine.add_Click($handler_btnAddLine_Click)
$form1.Controls.Add($btnAddLine)

$txt2.Anchor = 14
$txt2.DataBindings.DefaultDataSourceUpdateMode = 0
$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 12
$System_Drawing_Point.Y = 180
$txt2.Location = $System_Drawing_Point
$txt2.Name = "txt2"  
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 20
$System_Drawing_Size.Width = 165
$txt2.Size = $System_Drawing_Size
$txt2.TabIndex = 0
$form1.Controls.Add($txt2)

$txt1.Anchor = 15
$txt1.DataBindings.DefaultDataSourceUpdateMode = 0
$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 12
$System_Drawing_Point.Y = 12
$txt1.Location = $System_Drawing_Point
$txt1.Multiline = $True
$txt1.Name = "txt1"  
$txt1.ScrollBars = 2
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 151
$System_Drawing_Size.Width = 226
$txt1.Size = $System_Drawing_Size
$txt1.TabIndex = 2
$txt1.ReadOnly = $true
$txt1.add_TextChanged($handler_txt1_TextChanged)
$form1.Controls.Add($txt1)

#Save the initial state of the form
$InitialFormWindowState = $form1.WindowState
#Init the OnLoad event to correct the initial state of the form
$form1.add_Load($OnLoadForm_StateCorrection)
#Show the Form
$form1.ShowDialog()| Out-Null

} #End Function

GenerateForm
Grüße Uwe

p.s. Es wäre von Vorteil wenn du zumindest das Wort "Powershell" in deinem Titel erwähnen könntest, so dass auch andere den Thread finden können und direkt wissen worum es geht. Danke.
SaschaRD
SaschaRD 18.02.2016 um 09:32:53 Uhr
Goto Top
Hallo,

danke @colinardo (Uwe), kann ich auch gut gebrauchen.

Gruß, Sascha
arduino
arduino 25.02.2016 um 16:39:16 Uhr
Goto Top
Hallo Uwe

Super Sache, genau was ich brauche. Ein leicht verspätetes danke face-smile

p.s. Es wäre von Vorteil wenn du zumindest das Wort "Powershell" in deinem Titel erwähnen könntest, so dass auch andere den Thread finden können und direkt wissen worum es geht. Danke.
Ist angepasst, ich war wohl etwas schnell mit klicken

Gruess
Arduino
colinardo
colinardo 25.02.2016 aktualisiert um 16:46:08 Uhr
Goto Top
Zitat von @arduino:
Super Sache, genau was ich brauche. Ein leicht verspätetes danke face-smile
Keine Ursache. Freut mich wenn ich helfen konnte face-smile
Ist angepasst, ich war wohl etwas schnell mit klicken
Merci.