okidoki
Goto Top

Txt zeilennummeriert anzeigen und ändern

Moin,

ich habe eine txt mit verschiedenen Parametern:

montag:nein
dienstag:ja
mittwoch:ja
donnerstag:nein
...

Nun möchte ich gerne die Parameter untereinander im Fenster angezeigt bekommt, einen auswählen und ändern können.
Das Fenster habe ich, eine zeilenweise Anzeige fehlt, ebenso eine Auswahl- und Änderungsmöglichkeit.
Mit ist unklar, wie sich die enthaltenen Werte praktik- und komfortabel ändern lassen:
z.B. dienstag:ja --> dienstag:nein usw.
set /p Werte=<werte.txt
powershell -Executionpolicy ByPass  -NoProfile -Command "Add-Type -A Microsoft.VisualBasic; return [Microsoft.VisualBasic.Interaction]::InputBox('Bitte Daten eingeben %Werte%','Eingabe')" >"auswahl.txt"  

Kann mir jemand helfen?
Gruß okidoki

Content-Key: 653487

Url: https://administrator.de/contentid/653487

Printed on: April 24, 2024 at 10:04 o'clock

Mitglied: 147669
Solution 147669 Feb 18, 2021, updated at Feb 19, 2021 at 09:35:22 (UTC)
Goto Top
Mit der Powershell hast du alle Freiheiten in der Fenstergestaltung face-wink....
Bei dem Textdatei-Aufbau bietet sich bspw. das "CheckedListBox" Control an: (Ich würde das zwar heute eher gleich als XML oder CSV verpacken aber das ist dann Geschmackssache)
$file = 'D:\test.txt'  

function GenerateForm {

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

#region Generated Form Objects
$form1 = New-Object System.Windows.Forms.Form
$bSave = New-Object System.Windows.Forms.Button
$clb = New-Object System.Windows.Forms.CheckedListBox
$InitialFormWindowState = New-Object System.Windows.Forms.FormWindowState
#endregion Generated Form Objects

$handler_form1_Load= {
    gc $file | %{
        $line = $_.split(":")  
        $clb.Items.Add($line,($line[1].trim() -eq 'ja'))  
    }
}

$handler_bSave_Click={
    0..($clb.items.Count-1) | %{"$($clb.Items[$_]):$(@{$true="ja";$false="nein"}[$clb.GetItemChecked($_)])"} | sc $file  
    $form1.Close()
}
$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 = 139
$System_Drawing_Size.Width = 292
$form1.ClientSize = $System_Drawing_Size
$form1.DataBindings.DefaultDataSourceUpdateMode = 0
$form1.MaximizeBox = $False
$form1.Name = "form1"  
$form1.Text = "MyForm"  
$form1.add_Load($handler_form1_Load)

$bSave.Anchor = 10

$bSave.DataBindings.DefaultDataSourceUpdateMode = 0

$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 205
$System_Drawing_Point.Y = 112
$bSave.Location = $System_Drawing_Point
$bSave.Name = "bSave"  
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 23
$System_Drawing_Size.Width = 75
$bSave.Size = $System_Drawing_Size
$bSave.TabIndex = 1
$bSave.Text = "Save"  
$bSave.UseVisualStyleBackColor = $True
$bSave.add_Click($handler_bSave_Click)

$form1.Controls.Add($bSave)

$clb.Anchor = 15
$clb.DataBindings.DefaultDataSourceUpdateMode = 0
$clb.FormattingEnabled = $True
$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 12
$System_Drawing_Point.Y = 12
$clb.Location = $System_Drawing_Point
$clb.Name = "clb"  
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 94
$System_Drawing_Size.Width = 268
$clb.Size = $System_Drawing_Size
$clb.TabIndex = 0

$form1.Controls.Add($clb)

#endregion Generated Form Code

#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
$clb.SelectedItem
} #End Function

#Call the Function
GenerateForm
Gruß SK
Member: OKIDOKI
OKIDOKI Feb 18, 2021 updated at 18:56:22 (UTC)
Goto Top
Das sieht schon mal total klasse aus, vielen Dank!!!

Nun habe ich eine Auswahl, das ist super. Wie kann ich die Eigenschaften der einzelnen Attribute aber nun ändern und speichern?
z.B. dienstag:ja --> dienstag:nein usw.

Zum Testen habe ich das Powerschell-Fenster genutzt - da klappte es gleich am Anfang (nur nicht aus der Batch heraus)
Daher eine weitere Frage:
Das Script muss aus einer Batch heraus gestartet werden. Wie gelingt der Aufruf, das Abarbeiten (also die Änderung) und das Schließen, um in der Batch anschließend fortzufahren? Das Script als dateiname.ps1 abzuspeichern und in der Batch als start /w powershell.exe 'D:\batches\temp-auslesen\dateiname.ps1' geht leider noch nicht. Es erscheint folgende Meldung:
D:\batches\temp-auslesen\dateiname.ps1 : Die Datei "D:\batches\dateiname.ps1" kann nicht geladen werden,  
da die Ausführung von Skripts auf diesem System deaktiviert ist. Weitere Informationen finden Sie unter
"about_Execution_Policies" (https:/go.microsoft.com/fwlink/?LinkID=135170).  
In Zeile:1 Zeichen:1
+ D:\batches\temp-auslesen\dateiname.ps1
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : Sicherheitsfehler: (:) , PSSecurityException
    + FullyQualifiedErrorId : UnauthorizedAccess

Mir ist leider nicht so ganz klar, was ich machen soll! Wichtig wäre auch, dass das Script auf anderen Systemen läuft, sodass ich ich es innerhalb des Scriptes zum Laufen bekomme (ohne jetzt händisch ins System eingreifen zu müssen).

Gruß okidoki
Member: em-pie
em-pie Feb 18, 2021 at 19:45:59 (UTC)
Goto Top
Moin,

die Fehlermeldung ist doch sprechend.
Starte das Script mal mit
 start /w powershell.exe -ExecutionPolicy Bypass 'D:\batches\temp-auslesen\dateiname.ps1'  

Hinweis:
somit umgehts du die SIcherheitsrichtlinie für dieses Script.
hat jemand vorher etwas anderes in die ps1 geschrieben, wird die ausgeführt.

Besser ist es (nach de eigenen Test), das Script zu signieren und dann ohne die ergänzende Angabe anzuführen.
Wurde das Script im Nachgang geändert, passt es nicht mehr zur Signatur und wird "blockiert".

https://www.msxfaq.de/code/powershell/ps_signatur.htm

Gruß
em-pie
Member: OKIDOKI
OKIDOKI Feb 18, 2021 at 19:56:37 (UTC)
Goto Top
... passiert einfach gar nichts, keine Meldung 🤣
Member: em-pie
em-pie Feb 18, 2021 at 20:01:56 (UTC)
Goto Top
Halte ich für ein Gerücht..
was passiert bei einem Batch-Aufruf mit folgendem Inhalt:
start /w powershell.exe -ExecutionPolicy Bypass 'D:\batches\temp-auslesen\dateiname.ps1'  
PAUSE
Member: OKIDOKI
OKIDOKI Feb 18, 2021 updated at 20:23:12 (UTC)
Goto Top
... wieder nix!

Merkwürdigerweise startet nach dem folgenden Code das Fenster, bereit zur Eingabe. Ich hatte sonst gedacht, dass zumindest die Textdatei mit Zeilenumbrüchen (vielleicht sogar nummeriert) dargestellt wird. Dann gebe ich eine Nummer ein, bekomme das zu ändernde Attribut dieser Zeile, kann es ändern, es wird gespeichert - fertig. Aber irgendwie zu einfach gedacht ...
set /p Werte=<werte.txt
powershell -ExecutionPolicy ByPass  -NoProfile -Command "Add-Type -A Microsoft.VisualBasic; return [Microsoft.VisualBasic.Interaction]::InputBox('Bitte Daten eingeben %Werte%','Eingabe')" >"auswahl.txt"  
Member: TK1987
TK1987 Feb 19, 2021 updated at 07:33:20 (UTC)
Goto Top
Moin,

Zitat von @em-pie:
 start /w powershell.exe -ExecutionPolicy Bypass 'D:\batches\temp-auslesen\dateiname.ps1'  
ohne Angabe des Parameter -File würde Powershell das 'D:\batches\temp-auslesen\dateiname.ps1' lediglich als Zeichenkette ausgeben.
powershell.exe -ExecutionPolicy Bypass -File 'D:\batches\temp-auslesen\dateiname.ps1'  

Gruß Thomas
Member: OKIDOKI
OKIDOKI Feb 19, 2021 at 08:06:03 (UTC)
Goto Top
😢

D:\batches\temp-auslesen>powershell.exe -ExecutionPolicy Bypass -File 'D:\batches\temp-auslesen\dateiname.ps1'  
Fehler beim Verarbeiten von -File "'D:\batches\temp-auslesen\dateiname.ps1'": Das angegebene Pfadformat wird nicht unterstützt. Geben Sie einen gültigen Pfad für den -File-Parameter an.  
Member: TK1987
TK1987 Feb 19, 2021 updated at 08:16:39 (UTC)
Goto Top
Ach stimmt, bei CMD-Befehlen müssen zwingend double quotes verwendet werden
powershell.exe -ExecutionPolicy Bypass -File "D:\batches\temp-auslesen\dateiname.ps1"  
Member: OKIDOKI
OKIDOKI Feb 19, 2021 at 08:18:19 (UTC)
Goto Top
SUPER!!! Dankeschön!!!
Bleibt nur noch das Problem:
"Nun möchte ich gerne die Parameter untereinander im Fenster angezeigt bekommen - erledigt -
einen auswählen und ändern können.
z.B. dienstag:ja --> dienstag:nein usw."
Mitglied: 147669
147669 Feb 19, 2021 updated at 08:58:05 (UTC)
Goto Top
Zitat von @OKIDOKI:

SUPER!!! Dankeschön!!!
Bleibt nur noch das Problem:
"Nun möchte ich gerne die Parameter untereinander im Fenster angezeigt bekommen - erledigt -
einen auswählen und ändern können.
z.B. dienstag:ja --> dienstag:nein usw."
Das macht doch bereits der Dialog, er listet die Optionen untereinander auf und ließt das Ja/Nein jeweils als Check-Status in die CheckedListBox ein, einfach dort das Häkchen setzen wo Ja erscheinen soll, bei den anderen nicht angehakten erscheint automatisch ein Nein, all das wird nach Klick auf Save genau so wieder in der Textdatei abgespeichert ...
Man müsste sich ja einfach mal nur mal den Code selbst ansehen, aber was sag ich, ist ja Freitag.🐟🐟
Member: OKIDOKI
OKIDOKI Feb 19, 2021 updated at 09:20:36 (UTC)
Goto Top
oh mann, wg. Freitag, Schneechaos, Shutdown -
oder einfach "Methode des genauen Hinsehens" nicht beachtet 🤣
Ihr seid die Besten, Dankeschön!

Eine Frage habe ich noch: Die Datei wird beim Start aber nicht so ausgelesen wie gespeichert.
D.h., falls z.B. Montag in der Datei mit ja angegeben ist, das Fenster startet, dann ist Montag (bzw. alle Parameter) nicht angekreuzt.
Beispiel:
Montag:ja
Dienstag:nein
Mittwoch:ja
Donerstag:nein
...

Beim Aufruf sind alle Parameter nicht angekreuzt, obwohl einige in der Datei ja haben ...
Wie kann ich das einstellen, dass die Parameter beim Start entsprechend angezeigt werden?

okidoki
Mitglied: 147669
147669 Feb 19, 2021 at 09:26:44 (UTC)
Goto Top
Zitat von @OKIDOKI:
Eine Frage habe ich noch: Die Datei wird beim Start aber nicht so ausgelesen wie gespeichert.
Doch klappt hier einwandfrei ...
D.h., falls z.B. Montag in der Datei mit ja angegeben ist, das Fenster startet, dann ist Montag (bzw. alle Parameter) nicht angekreuzt.
Beispiel:
Montag:ja
Dienstag:nein
Mittwoch:ja
Donerstag:nein
...

Beim Aufruf sind alle Parameter nicht angekreuzt, obwohl einige in der Datei ja haben ...
Klappt hier problemlos.
Wie kann ich das einstellen, dass die Parameter beim Start entsprechend angezeigt werden?
Schon eingebaut und funktioniert.
Member: OKIDOKI
OKIDOKI Feb 19, 2021 updated at 09:36:10 (UTC)
Goto Top
Spitze, vielen Dank!

Kann ich die Liste auch mit Text versehen, der nicht verändert wird? Quasi als Hilfstext, wo würde ich den einfügen?
Wenn ich in der Datei einen Text hinzufüge wird der ebenfalls mit Checkbox angezeigt und erhält z.B. ein ja 🤣
Mitglied: 147669
Solution 147669 Feb 19, 2021 at 09:36:40 (UTC)
Goto Top
Member: OKIDOKI
OKIDOKI Feb 19, 2021 at 09:48:45 (UTC)
Goto Top
Vielen, vielen Dank euch!

Gruß
okidoki
Member: OKIDOKI
OKIDOKI Feb 20, 2021 updated at 11:10:25 (UTC)
Goto Top
Bisher: Konnte die Box wunderbar anpassen und habe viel damit herumgespielt!
Leider muss ich doch noch einmal stören:

SchmitzKatz:
Ich habe versucht die Inhalte deines Links zu verstehen ... irgendwie bin ich aber nicht darauf gestoßen, wie das bei Powershell einzufügen ist, es gibt immer nur Beispiel für C#.

Nun hatte ich mir folgendes überlegt:
$FontBold = new-object System.Drawing.Font("Arial",8,[Drawing.FontStyle]'Bold' )  

$objLabel = New-Object System.Windows.Forms.Label
$objLabel.Location = New-Object System.Drawing.Size(10,20)
$objLabel.Size = New-Object System.Drawing.Size(300,20)
$objLabel.Font = $fontBold
$objLabel.text = "Bitte entsprechende Tage kennzeichnen:"  
$objForm.Controls.Add($objLabel)

An welcher Stelle ich es aber auch immer einbaue führt zu einer Fehlermeldung:
Es ist nicht möglich, eine Methode für einen Ausdruck aufzurufen, der den NULL hat.
In D:\batches\temp-auslesen\dateiname.ps1:54 Zeichen:1
+ $objForm.Controls.Add($objLabel)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) , RuntimeException
    + FullyQualifiedErrorId : InvokeMethodOnNull

Da komme ich nicht weiter - kannst du bitte noch einmal drauf schauen?
Member: TK1987
TK1987 Feb 20, 2021 at 12:34:53 (UTC)
Goto Top
Moin,

zuerst mal als kleinen Tipp, dass mit dem System.Drawing.Point oder System.Drawing.Size kann man sich sparen. Man kann die Werte auch direkt setzen:
$objLabel.Location = "10,20"  
$objLabel.Size = "300,20"  
Wichtig ist aber, dass die beiden Zahlen immer in Quotes gesetzt werden müssen.

Nun zum eigentlichen Problem:

Zitat von @OKIDOKI:
 Es ist nicht möglich, eine Methode für einen Ausdruck aufzurufen, der den NULL hat.
 In D:\batches\temp-auslesen\dateiname.ps1:54 Zeichen:1
 + $objForm.Controls.Add($objLabel)
 + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     + CategoryInfo          : InvalidOperation: (:) , RuntimeException
     + FullyQualifiedErrorId : InvokeMethodOnNull
 
Der Fehler sagt aus, dass deine $objForm-Variable keinen Inhalt hat.
Vermutlich hast du diese im Skript entweder umbenannt oder überschrieben - aus dem geposteten Schnipsel nicht zu erkennen.

Gruß Thomas
Member: OKIDOKI
OKIDOKI Feb 20, 2021 at 12:49:16 (UTC)
Goto Top
Moin Thomas,

den Schnipsel hatte ich versucht in SchmitzKatz Code (s.o.) einzufügen (an verschiedenen Stellen), dann kam die Meldung!
Ich wollte jetzt nur nicht den kompletten Code noch einmal posten.
Daher die Frage, ob der Schnipsel dort überhaupt Sinn macht - und wenn - an welcher Stelle 😎.

Insofern - um auf deine Frage zu antworten - meine $objForm-Variable hat weiterhin keinen Inhalt, da ich sie, bis auf den Schnipsel, aus Unkenntnis weder definiert noch irgendwo eingefügt hatte.

PS: Ich kann mir gut vorstellen, dass es für Profis manchmal nicht ganz leicht ist Einsteigerposts auszuhalten! Allerdings habe ich in diesem Forum insgesamt schon so viele Erkenntnisse und erstklassige Lösungen gefunden, wie sonst nirgendwo bei google! Und ich hoffe, dass auch meine Fragen - zusammen mit den passenden Antworten - vielen anderen weiterhelfen. Bei vielen meiner Probleme habe ich auf anderen Seiten gesehen, dass es anderen Menschen genauso geht!

okidoki
Member: TK1987
TK1987 Feb 20, 2021 at 13:36:25 (UTC)
Goto Top
Ich rate dir, mal ein kleines Windows-Forms-Tutorial für Powershell durch zu ackern und dann zu versuchen, dir dein Fenster komplett selbst zusammen zu bauen.

Der Lerneffekt ist deutlich größer und für Anfänger ist es selten trivial, in bestehendem Code von anderen etwas einzubauen.
Mitglied: 147669
147669 Feb 22, 2021 updated at 07:30:03 (UTC)
Goto Top
$objForm
Die Variable gibt es in meinem Skript nicht, deswegen ist die Fehlermeldung eindeutig !
In meinem Code oben gibt es nur $form1, ergo musst du das $objForm durch $form1 ersetzen...logisch oder ?!
zuerst mal als kleinen Tipp, dass mit dem System.Drawing.Point oder System.Drawing.Size kann man sich sparen. Man kann die Werte auch direkt setzen:
Ja weiß ich, war nur zu faul das zu ersetzen denn der Code wird von einem GUI Editor zusammengeschrotet deswegen hat mich das nicht gejuckt...
Member: OKIDOKI
OKIDOKI Feb 22, 2021 at 08:46:23 (UTC)
Goto Top
Moin,
schon lange wollte ich von Batch auf Powershehll umsteigen, hatte bisher aber megagroßen Respekt ...
Deswegen, da Herausforderungen vorhandener "Programmblöcke" umzuwandeln mich etwas ohnmächtig machen lassen, wie die Sortierung einer Tabelle, mit Batch:
<Werte.txt more +1|sort >Werte-sort.txt
oder auch das Auslesen von Excel, das ich dringend benötige:
 >convert.vbs echo Set XL = CreateObject("Excel.Application")  
>>convert.vbs echo Set fso = CreateObject("Scripting.FileSystemObject")  
>>convert.vbs echo Set wss = CreateObject("WScript.Shell")  
>>convert.vbs echo OrdnerEin = wss.currentdirectory
>>convert.vbs echo For Each Datei In fso.GetFolder(OrdnerEin).Files
>>convert.vbs echo If lcase(Datei.name) = "1.xlsx" or lcase(Datei.name) = "2.xlsx" then  
>>convert.vbs echo XL.Workbooks.Open Datei.Path
>>convert.vbs echo For Each Wsheet In XL.ActiveWorkbook.Worksheets
>>convert.vbs echo if fso.FileExists (OrdnerEin ^& "\" ^& fso.GetBaseName(Datei.Name) ^& "_" ^& Wsheet.Name ^& ".csv") Then  
>>convert.vbs echo fso.DeleteFile(OrdnerEin ^& "\" ^& fso.GetBaseName(Datei.Name) ^& "_" ^& Wsheet.Name ^& ".csv")  
>>convert.vbs echo end if
>>convert.vbs echo if wsheet.name ="VT-Plan" then  
>>convert.vbs echo Wsheet.SaveAs OrdnerEin ^& "\" ^& fso.GetBaseName(Datei.Name) ^& "_" ^& Wsheet.Name ^& ".csv",6 , , , , False  
>>convert.vbs echo End if
>>convert.vbs echo Next
>>convert.vbs echo XL.ActiveWorkbook.Close False
>>convert.vbs echo End If
>>convert.vbs echo Next
>>convert.vbs echo XL.Quit
>>convert.vbs echo Set XL = Nothing
>>convert.vbs echo Set wss = Nothing
... da traue ich mich einfach (noch) nicht ran!
Und eine weitere ungelöste Frage habe ich, wie einzelne Code-Teile verbunden werden (in Batch habe ich das einfach durchlaufen lassen können, bzw. goto ist super). Ist das bei Powershell genauso? Also, könnte damit auch kleines "Programm" realisieren?
Dazu noch zwei Fragen:
- Welches Tut ist besonders zu empfehlen? Hatte mit diesem begonnen:
Powershell
- Welchen GUI Editor meinst du, SchmitzKatz?

So, aber nun zu TK1987, den Tipp habe ich mir sehr zu Herzen genommen, und bin einfach ins kalte Wasser gesprungen face-smile
Auch wenn es schwierig ist sich in anderer Leute Code zurechtzufinden, habe ich mit meiner ersten Erfahrung SchmitzKatz erweitert!!!
Meine erste eigene Erweiterung (vielleicht auch für andere Einsteiger, habe meine Kommentare einfach drinnen gelassen. Bin total baff, was möglich ist:
$file = 'werte.txt'  

function GenerateForm {

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

#region Generated Form Objects
$form1 = New-Object System.Windows.Forms.Form
$bSave = New-Object System.Windows.Forms.Button
$clb = New-Object System.Windows.Forms.CheckedListBox
$InitialFormWindowState = New-Object System.Windows.Forms.FormWindowState
#endregion Generated Form Objects

$handler_form1_Load= {
    gc $file | %{
        $line = $_.split(":")  
        $clb.Items.Add($line,($line[1].trim() -eq 'ja'))  
    }
}

$handler_bSave_Click={
    0..($clb.items.Count-1) | %{"$($clb.Items[$_]):$(@{$true="ja";$false="nein"}[$clb.GetItemChecked($_)])"} | sc $file  
    $form1.Close()
}
$OnLoadForm_StateCorrection=
{#Correct the initial state of the form to prevent the .Net maximized form issue
	$form1.WindowState = $InitialFormWindowState
}

#----------------------------------------------
#region Generated Form Code


# Beschriftung des Fensterinhalts / Objektklasse Label aus dem Forms Assembly
$objlabel = New-Object System.Windows.Forms.Label
# Textposition im Fenster
$objlabel.Location = "10,12"  
# Reservierte Größe der Textbox / wie jede andere Textbox, z.B. mit Umbruch bei Kürze
$objlabel.Size = "200,20"  
# Inhalt der Textbox
$objlabel.Text = "Auswahl treffen:"  
# Name des Objektes, um es aus anderen Programmteilen darauf zugreifen zu können / könnte entfallen
$objlabel.Name = "Anweisung"  
# Einbau des Objektes ins Hauptfenster
$form1.Controls.Add($objlabel)


$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 489
$System_Drawing_Size.Width = 392
$form1.ClientSize = $System_Drawing_Size
$form1.DataBindings.DefaultDataSourceUpdateMode = 0
$form1.MaximizeBox = $False
$form1.Name = "form1"  
$form1.Text = "MyForm"  
# Neue Position :-)
$form1.StartPosition = "CenterScreen"  
$form1.add_Load($handler_form1_Load)

$bSave.Anchor = 10

$bSave.DataBindings.DefaultDataSourceUpdateMode = 0

$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 305
$System_Drawing_Point.Y = 452
$bSave.Location = $System_Drawing_Point
$bSave.Name = "bSave"  
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 23
$System_Drawing_Size.Width = 75
$bSave.Size = $System_Drawing_Size
$bSave.TabIndex = 1
$bSave.Text = "Save"  
$bSave.UseVisualStyleBackColor = $True
$bSave.add_Click($handler_bSave_Click)

$form1.Controls.Add($bSave)

$clb.Anchor = 15
$clb.DataBindings.DefaultDataSourceUpdateMode = 0
$clb.FormattingEnabled = $True
$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 12
$System_Drawing_Point.Y = 42
$clb.Location = $System_Drawing_Point
$clb.Name = "clb"  
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 394
$System_Drawing_Size.Width = 368
$clb.Size = $System_Drawing_Size
$clb.TabIndex = 0

$form1.Controls.Add($clb)

#endregion Generated Form Code

#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
$clb.SelectedItem
} #End Function

#Call the Function
GenerateForm

okidoki
Mitglied: 147669
147669 Feb 22, 2021 updated at 11:45:56 (UTC)
Goto Top
Zitat von @OKIDOKI:
Dazu noch zwei Fragen:
- Welches Tut ist besonders zu empfehlen? Hatte mit diesem begonnen:
Powershell
Ich würde erst mal klein bei den Grundlagen anfangen als direkt in die GUI Programmierung einzusteigen, du wirst sonst immer wieder über Dinge stolpern die dir unerklärlich erscheinen, aber nunmal PS Basics sind deswegen ist es bei PS besser klein anzufangen, damit lernst du es nachhaltiger und wirst mehr Freude daran haben ...


Auch sehr hilfreich ist es sich mit dem .NET Framework auseinander zu setzen denn aus dem besteht die PS hauptsächlich und diese kann sämtliche NET Framework Klassen und Funktionen nutzen.

- Welchen GUI Editor meinst du, SchmitzKatz?
https://www.sapien.com/software/powershell_studio
Gabs früher auch mal eine kostenlose Community Edition von, die ist aber inzwischen eingestellt. Wenn du sie haben willst kurze PN.
Ansonsten kannst du auch zu
https://poshgui.com/
greifen um schneller GUIs zusammen zu schroten.
Member: OKIDOKI
OKIDOKI Feb 22, 2021 at 11:54:17 (UTC)
Goto Top
Hey SchmitzKatz,

lieben Dank für den Anfang und Einstieg!
Die ersten Schritte habe ich ja unternommen, werde mich auf jeden Fall weiter professionalisieren!
Spätestens dann, wenn ich hier mal jemanden helfen kann, gelingt der Durchbruch face-smile.

Beste Grüße
okidoki