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.
Kann mir jemand helfen?
Gruß okidoki
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 653487
Url: https://administrator.de/contentid/653487
Ausgedruckt am: 19.11.2024 um 17:11 Uhr
24 Kommentare
Neuester Kommentar
Mit der Powershell hast du alle Freiheiten in der Fenstergestaltung ....
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)
Gruß SK
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
Moin,
die Fehlermeldung ist doch sprechend.
Starte das Script mal mit
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
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
Moin,
Gruß Thomas
Zitat von @em-pie:
ohne Angabe des Parameter -File würde Powershell das 'D:\batches\temp-auslesen\dateiname.ps1' lediglich als Zeichenkette ausgeben. start /w powershell.exe -ExecutionPolicy Bypass 'D:\batches\temp-auslesen\dateiname.ps1'
powershell.exe -ExecutionPolicy Bypass -File 'D:\batches\temp-auslesen\dateiname.ps1'
Gruß Thomas
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 ...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."
Man müsste sich ja einfach mal nur mal den Code selbst ansehen, aber was sag ich, ist ja Freitag.🐟🐟
Zitat von @OKIDOKI:
Eine Frage habe ich noch: Die Datei wird beim Start aber nicht so ausgelesen wie gespeichert.
Doch klappt hier einwandfrei ...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 ...
Klappt hier problemlos.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?
Schon eingebaut und funktioniert.
Ja, einfach mal lesen
https://docs.microsoft.com/de-de/dotnet/desktop/winforms/controls/label- ...
https://docs.microsoft.com/de-de/dotnet/desktop/winforms/controls/label- ...
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:
Wichtig ist aber, dass die beiden Zahlen immer in Quotes gesetzt werden müssen.
Nun zum eigentlichen Problem:
Vermutlich hast du diese im Skript entweder umbenannt oder überschrieben - aus dem geposteten Schnipsel nicht zu erkennen.
Gruß Thomas
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"
Nun zum eigentlichen Problem:
Zitat von @OKIDOKI:
Der Fehler sagt aus, dass deine $objForm-Variable keinen Inhalt hat. 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
Vermutlich hast du diese im Skript entweder umbenannt oder überschrieben - aus dem geposteten Schnipsel nicht zu erkennen.
Gruß Thomas
$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...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 ...Dazu noch zwei Fragen:
- Welches Tut ist besonders zu empfehlen? Hatte mit diesem begonnen:
Powershell
- Kapitel 1: Erste Schritte mit PowerShell
- Kapitel 2: Das Hilfesystem
- Kapitel 3: Entdecken von Objekten, Eigenschaften und Methoden
- Kapitel 4: Einzeiler und die Pipeline
- Kapitel 5: Formatierung, Aliase, Anbieter, Vergleich
- Kapitel 6: Flusssteuerung
- Kapitel 7: Arbeiten mit WMI
- Kapitel 8: PowerShell-Remoting
- Kapitel 9: Funktionen
- Kapitel 10: Skriptmodule
- Anhang A: Hilfesyntax
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_studioGabs 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.