Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Portal
  • |
  • Mitglieder
Beiträge von Abt
Thema: Was hören .net Programmierer?
Am im Forum: Smalltalk

Jetzt wollen alle Dein Soundcloud Profile ;-)

Thema: Programm stürzt ab, oder rechnet und rechnet
Am im Forum: Grundlagen von C#

Zitat von sane
Die listen sind aber immer noch in verwendung und wenn ich in der liste ein Enum - status verändere, dann wir dieser im dict auch verändert. Warum ist das so? Beispiel folgt!
Weil Person ein Referenztyp ist.
https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/reference-types
Das is das Grundprinzip jedes Referenz-Objekts und jeder Klasse in C#.

Thema: SQL2019 - INSERT INTO - Inahlt der Variablen werden als "ungültiger Spatenname" angezeigt
Am im Forum: Datentechnologien

Naja, such einfach mal nach Google Suche nach "c# sql command"
Die ersten Treffer sind sofort Microsoft Docs, die alle Beispiele korrekt mit Parametern zeigen.

Gerade Anfänger suchen aber oft leider nur Copy-Paste Snippets; und die folgenden Treffer sind übliche verdächtige Seiten, die String-Concat für Werte nehmen.
Ich seh auf der ersten Seite 7 Beispiele, von denen zwei Parameter verwenden.


cmd.CommandText = "insert into student_detail values (" + txtrollno.Text + ",'" + txtname.Text + "','" + txtcourse.Text + "')"; // set
https://www.c-sharpcorner.com/UploadFile/718fc8/working-with-sqlconnection-and-sqlcommand-class-in-ado-net/ Fast 300k Views.
Da solche Kandidaten nicht nur gern einfach kopieren, sondern den Rest der Artikel einfach nicht lesen, kommt am Ende murks raus.

Thema: SQL2019 - INSERT INTO - Inahlt der Variablen werden als "ungültiger Spatenname" angezeigt
Am im Forum: Datentechnologien

Zitat von Myfly
Man postet ja nicht einfach so.....
Viele schon :-) Viele posten einfach und hoffen, dass andere einem die Arbeit abnehmen oder suchen halt nicht. Suchen gehört aber zum Job dazu und auch das muss man lernen.
Und dass der Link Dir zu den SQL Parametern sofort geholfen hat, den man ja easy finden kann, bestätigt das ja auch ein bisschen.
Daher nimm so einen Hinweis an als: "Suchen erlernen" ;-)

Thema: Console-Fenster soll bei Fehlermeldung stehen bleiben.
Am im Forum: Grundlagen von C#

Dann solltest Du an den notwendigen Stellen vorher Exceptions abfangen und verarbeiten, dann kannst es genau lokalisieren.
Ein allgemeines Exception Handling um die gesamte Anwendung ist nur der aller letzter Punkt, wo ein Absturz der Anwendung verhindert werden kann.

Siehe: Behandeln und Auslösen von Ausnahmen in .NET

Was der Grund einer Exception ist, steht immer im Stack Trace, sofern man ihn nicht selbst verfälscht.

Zitat
Obenstehendes habe ich auch probiert, hat aber das Programm nicht am Schließen gehindert.
Dann hast Du es falsch gemacht.
Hab Dir deswegen den Link gegeben, weil da 1:1 ein Beispiel drin steht.

Thema: C# Anwendung für NET Framework 4.0 Console auslegen
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Nur indem Du das Projekt für .NET 4 auslegst (es also dafür kompilierst).
Alternativ kannst Du das versuchen, was aber nicht garantiert wird.
How to: Configure an app to support .NET Framework 4 or later versions - .NET Framework

Thema: Console-Fenster soll bei Fehlermeldung stehen bleiben.
Am im Forum: Grundlagen von C#

Zitat von EyckBlank
Geht etwas mit dem MessageBox-Fenster ?
Nicht in einer Konsole-Anwendung. Deswegen ist es eine Konsolenanwendung.
Zitat von EyckBlank
Hin und wieder gibt es eine Fehlermeldung, die ebenfalls kurz auf dem Console-Fenster erscheint
Nur wird dann das C# Programm daraufhin unmittelbar geschlossen.
Das liegt an der Art und Weise, wie Konsolenapplikationen funktionieren.

Wenn eine Exception in der Konsole erscheint, dann meinst Du offenbar eine unbehandelte Ausnahme aka eine Exception, die Du nicht abfängst.
Das Resultat ist, dass die Applikation abstürzt und sich der Prozess beendet.

Damit schließt Windows automatisch das Fenster.

2 Varianten:
- Du loggst, zB in Dateien oder den Windows Log. Schau in die Docs, wenn das neu für Dich ist => Protokollierung - .NET
- Du machst ein Try-Catch um die gesamte Anwendung (in der Main Methode), sodass Du die Exception abfängst (damit stürzt die Anwendung auch nicht mehr ab, und Du kannst drauf reagieren), ausgibst und mit Console.ReadKey()) das automatische Schließen verhinderst.

Mehr dazu in den Basics
Exceptions and Exception Handling

Thema: .net 6 Plugin Architektur
Am im Forum: Web-Technologien

Zitat von GrilleGsutav
Wenn ich z.B. ein Service registrieren möchte z.b. <IMyservice, MyService> dann muss sich die IMyService.cs immer in einen Gemeinsamen Prokekt befinden, auf das die Basis Anwendung und das Plugin Statische Referenzen haben ansonsten kann ich im z.b im Controller den Service nicht benutzen.
Nein, muss sie nicht. Ist in meinem Beispielprojekt auch nicht der Fall.

Thema: Programm nicht sichtbar, wenn von einem Dienst gestartet
Am im Forum: Grundlagen von C#

Damit eine Anwendung für einen User sichtbar wird (und damit mit den Berechtigungen des Users läuft), muss dieses auch durch den User selbst mit dessen User Context (und Desktop Context) gestartet werden.
Wenn ein Windows Service dies ohne weiteres könnte, wäre dies eine Sicherheitslücke. Daher geht das mit den Änderungen des neuen User Access Controls seit Windows Vista (ohne weiteres*) nicht mehr.
Das Verhalten, das Du erlebst, ist daher absolut korrekt.

Du kannst daher kein Windows Service für diese Anforderung verwenden, sondern müsstest eine Tray Application verwenden, die selbst durch den Benutzer gestartet wird.

*man kann das aushebeln, is nicht zu empfehlen.
Wenn man es trotzdem tun will: dazu muss man die Win32 API (advapi32.dll CreateProcessAsUser) ansprechen. In .NET ist das nicht gewrappt, auch nicht in der Process Klasse.

Thema: Insolvenz wegen Stromausfall
Am im Forum: Smalltalk

Zitat von pinki
Mir ist auch schon des Öfteren zu Ohren gekommen, dass zwar Backups erstellt werden, das Wiederherstellen selbst aber noch nie getestet worden ist.
Ist bei 99% meiner Kunden so. Und denke, dass ich "ganz normale" Kunden hab.

Thema: Gibt es noch das alte simple SQLite?
Am im Forum: Datentechnologien

Gibt schon noch Gründe gegen EF Core... so ist es ja nicht.
Das Marketing ist hier auch riesig, was die Einfachheit betrifft - aber die Realität zeigt so oft, dass das halt nicht so funktioniert.
Spätestens wenn man mehr machen will als ein Tool.

Zitat von FZelle
Ja es gibt eine weitere, viel einfacher zu benutzende Variante von SQLite und die hat nichts mit ADO.NET zu tun.
Daran erinner ich mich auch noch vage; habs sogar vor Jahren mal aktiv genutzt und ich habs auch in den NuGet Treffern gesehen. Deswegen hab ich auch bewusst geschrieben
Zitat
Das einzig offizielle, aktuell unterstützte und supportete Paket
Zitat von Palladin007
Wenn ich da so über die Beispiele scrolle - wo ist der Vorteil gegenüber dem Entity Framework?
Es wird immer die Einfachheit und die "rohe Performance" beworben. Aber das hast mit EFCore auch, kein Grund also mehr.
Den bemängelten "unnötigen Overhead" stammt noch aus EF4 Zeiten.

Im Endeffekt sind es nun noch die Gewohnheitstiere und die Anti-EF Fraktion (zu der ich zu EF-Zeiten auch mal gehört hatte).

Thema: Listview per Code aufrufen
Am im Forum: Grundlagen von C#

Also wirklich gut gemeinter Rat: magst Du nicht einfach mal ein Tutorial durchmachen?
So hart es sich anhört, aber mit "ich dachte das geht so" wirds ganz arg schwer Software zu programmieren geschweige denn zu erlernen.
Allein Microsoft hat dutzende von Tutorials für .NET, C# und WinForms.
Tutorial: Create a 'picture viewer' Windows Forms app - Visual Studio (Windows)
Dort werden ca 90% Deiner aktuellen Themen anschaulich gezeigt.

Allein wenn Du 2 Minuten in die Dokumentation von ListView schaust, dann siehst Du Beispielcode, wie das funktioniert.
https://learn.microsoft.com/de-de/dotnet/api/system.windows.forms.listview?view=windowsdesktop-6.0
Zeigst uns also: hast nicht ein mal in die Doc geschaut.

Und natürlich reicht es nicht einfach nur eine Instanz eines UI Objekts zu erzeugen.
Man muss auch "irgendwo hinzufügen".


    // Add the ListView to the control collection.
    this.Controls.Add(listView1);

Thema: Gibt es noch das alte simple SQLite?
Am im Forum: Datentechnologien

Mir ist ein Rätsel, wovon Du sprichst.
Das einzig offizielle, aktuell unterstützte und supportete Paket ist Microsoft.Data.Sqlite
System.Data.SQLite ist das alte Paket,

Und wenn ich mich richtig erinnere, gab es niemals ein offizielles Paket (von Microsoft oder vom Sqlite Team) ohne ADO.NET.
Kannst natürlich die nativen Libs nehmen (das ist das Paket Sqlite, deswegen hats keine Dependencies) und die ganzen Wrapper selbst schreiben.

Zitat
Als ich das letzte Mal SQLite benutzt habe, hatte ich einen "normalen" SQL-String, den ich mit C#-Variablen dynamisch füllte.
Der einzig korrekte, sichere Weg für das Füllen eines SQL Strings sind Parameter. Schon immer gewesen, nicht nur in .NET.
[Artikelserie] SQL: Parameter von Befehlen
Auch das war bei SQL bzw. Datenbanken nie anders.

Thema: Serialisierung von ListView
Am im Forum: Grundlagen von C#

Zitat von kstanger
Ich meine, dass ich dadurch ein lokales Array mit einer festen Größe definiert habe.
Arrays haben immer eine feste Größe.
Zitat von kstanger
Ich dachte, Farben sei die Instanz?
Ja, Du hast das Array Farben erzeugt. Das ist dann "leer".
Mit Farben[loop] versuchst Du aber ein Objekt Farbe zu verwenden, das nicht erzeugt wurde.


for index in listitems
   Farbe farbe = new Farbe(mit Deinen Werten)
   farben[index] = farbe

Das siehst Du auch im Debugger, mit denen sich solche Fehler sehr einfach finden lassen.
[Artikel] Debugger: Wie verwende ich den von Visual Studio?

Thema: Serialisierung von ListView
Am im Forum: Grundlagen von C#

Ein Tipp der hilft, den man auch in Schulungen macht: wenn Du den eigenen Code und Flow nicht verstehst, dann mal ihn wie ein Diagramm auf ein Papier.
Und wenn Du merkst, dass der Flow funktioniert, dann schreib ihn in Code.

Im Endeffekt, mit der Annahme, dass Farbe Deine Datenklasse ist:
Lesen:
- Farben lesen
- Farbe für Farbe in die ListView eintragen

Schreiben:
- ListView Elemente nehmen, durch Items.Count weißt Du wie viele Elemente in der Liste sind und kannst mit dieser Info das Array initialisieren
- Jeden Eintrag in Farbe übertragen
- Farbe den Array Farben hinzufügen
- Farben schreiben

Es ist schwer zu verstehen, wo genau Dein Problem ist.
Ich will Dir aber nicht den Code schreiben, Du sollst es ja verstehen, sodass es Ping macht.

Thema: Serialisierung von ListView
Am im Forum: Grundlagen von C#

Ja, dahinter steckt eine Art von Collection (ob Liste oder Array spielt keine Rolle).
Aber man verwendet nicht die UI-Klassen der Liste für die Serialisierung - sondern eigene.

Zitat
Also muss ich jetzt statt meines Arrays eine Liste erzeugen, und die Daten vom UI-Element dort speichern.
Ne, hab ich auch nicht geschrieben.
Hab geschrieben: eigene Klasse für die Daten.
Ob das in einem Array oder in einer Liste gespeichert wird, ist für die Serialisierung völlig egal.

Die Liste hab ich nur ins Spiel gebracht weil Du geschrieben hast
Zitat
Mehrdimensionale Arrays können während Runtime nicht vergrößert werden.

Der Kernpunkt ist immer noch meine Aussage: eigene Klasse für jegliches Speichern von Inhalten.
Man serialisiert keine UI-Klassen/UI-Objekte.

Thema: Serialisierung von ListView
Am im Forum: Grundlagen von C#

Arrays können generell nie erweitert werden, sondern müssen mit einer gewisse Größe erzeugt werden.
Ist das zu klein, muss ein neues Array erzeugt und die Inhalte übertragen werden.

Deswegen gibt es in .NET Listen, die einem sowas abnehmen.
List<T> Klasse (System.Collections.Generic)

Thema: In Applikation Teilbereiche als anderer user ausführen
Am im Forum: Rund um die Programmierung

Steht direkt ein Beitrag drüber, in meiner letzten Antwort.

Zitat
Zum Beispiel widerstrebt es jeder Sicherheitsgrundlage, dass Du etwas von Außen auf eine Maschine pumpen musst.
Wie wärs mit einem Ansatz, dass die Maschine sich etwas von Außen holt? Wie wärs auf infrastrukturelle Dinge wie Shares zu verzichten und moderne Speicheraustauschsysteme zu verwenden oder sowas (ein bisschen) nachzubauen?
Welche Art von Implementierung die richtige ist, das musst evaluieren. Das kann Dir hier im Endeffekt niemand mit der Glaskugel sagen. Ein Forum kann bei konkreten Probleme helfen, aber Evaluierungen können wir für Dich nicht übernehmen.
Wir kennen alle die Anforderungen an eure IT/Netzwerk/Umgebung/Software/Features nicht.

Ein Webservice (vermutlich meinst HTTP Service) kann die richtige Wahl sein; muss aber nicht.

Thema: Serialisierung von ListView
Am im Forum: Grundlagen von C#

Nein, das ist nicht die Idee hinter Serialisierung eigener Daten.
Ich dachte, dass Du Dir die Zeit genommen hättest die Links zu lesen, die ich/andere Dir in den anderen Themen gegeben haben. Deswegen antworten Dir die Leute mit den Links ;-)

Punkt 1: man serialisiert keine Elemente einer UI.
Dass sowas in manchen UI-Elementen in WinForms enthalten war (noch ist), war damals ein pragmatischer Weg, den man aber bereut.
Das Zeug ist nur noch aus Kompatibilität drin - soll man nicht mehr verwenden (was auch in den Docs steht).

Punkt 2: verwendet man es doch, dann ist die Folge, dass Du eine Abhängigkeit an ein fremdes Element hast.
Das heisst: ändert sich was in/unter der ListView, dann funktioniert Deine gesamte Serialisierung nicht mehr.
Das ist eine Abhängigkeit, die man aus Konzeptgründen nicht haben will.
[Artikel] Drei-Schichten-Architektur
Die Grundidee hier ist, dass Dein gesamter Code auch funktionieren soll, wenn Du eine andere UI Technologie verwendest.
Daher haben modernere UI Frameworks auch keinerlei Serialisierungsunterstützung.

Daher ist die Lösung: eigene Klassen bauen für alles, was man selbst serialisiert / in der Verantwortung hat.
Und ja das heisst: mehr Code, beim Applikatiosstart Zeugs lesen, deserialisieren und damit die Liste füllen bzw. umgekehrt fürs Speichern.

Thema: Serialisierung von ListView
Am im Forum: Grundlagen von C#

Man serialisiert keine UI Elemente, sondern Datenklassen.

Thema: Json -> Unity3D
Am im Forum: Datentechnologien

Nimm das aber als generelle und nicht als spezifische Antwort.
Niemand hier kennt Deinen Code, wie effizient oder ineffizient dieser ist. Nur: Dynamik kostet halt etwas.

Thema: Insolvenz wegen Stromausfall
Am im Forum: Smalltalk

Für mich klingt das nach Missmanagement, menschliches Versagen.
Entweder vom Eigentümer:in der Firma und/oder von der Person, die für die IT verantwortlich war.

Genau für solche Fälle wünsche ich mir eigentlich mehr private Haftung für die Verantwortlichen.

Thema: Json -> Unity3D
Am im Forum: Datentechnologien

Zitat von Yeats
Welchen Ansatz könnte ich nun verfolgen, um einerseits die jetzige Flexibilität beizubehalten, aber gleichzeitig den allokierten Speicher gering zu halten?
In diesem Fall sehe ich das als gegenläufige Wünsche an.
Flexibilität musst Du Dir in diesem Fall leider erkaufen.

PS: System.Text.Json basiert mittlerweile auf Source Code Generators, die nur einen Bruchteil an Performance von Newtonsoft.Json brauchen; aber auch hier mit strikten Strukturen gearbeitet wird, wie es in Json vorgesehen ist.

Aus diesem Grund ist
Zitat
Dieser JSON-String besteht dabei aus einem Teil, der von mir kontrolliert wird und aus einem Teil, der von anderen Web-API's befüllt wird.
letzteres auch eine Gefahr, weil das letztere (so verstehe ich es) injiziert wird und damit die Stabilität beeinträchtigt.
Im Endeffekt ist das nicht die Grundidee von Schittststellen, die Standards verfolgen.

Normalerweise solltest Du _Deine_ Json vollständig kontrollieren und evtl. einen Mechanismus bauen, der zwar die Fremdaten variabel handhaben kann, aber immer in eine stabile Json überführt. Also quasi ein Converter dazwischen statt Plaintext rein posten.

Thema: In Applikation Teilbereiche als anderer user ausführen
Am im Forum: Rund um die Programmierung

Zitat von prokrammer
Nur wie soll man da noch direkt was übertragen? Daten müssen halt von A nach B kommen.
Deine Verantwortung ist eben das Konzept den Sicherheitsregeln anzupassen.
Im Endeffekt beschwerst Dich, dass andere sicherer werden, aber selbst willst gleich bleiben. Das kollidiert halt.

Zum Beispiel widerstrebt es jeder Sicherheitsgrundlage, dass Du etwas von Außen auf eine Maschine pumpen musst.
Wie wärs mit einem Ansatz, dass die Maschine sich etwas von Außen holt? Wie wärs auf infrastrukturelle Dinge wie Shares zu verzichten und moderne Speicheraustauschsysteme zu verwenden oder sowas (ein bisschen) nachzubauen?

Und ja - im Maschinenbau heisst das leider sehr oft, dass bestehende Dinge vollständig weggeschmissen werden müssen.
Viele Maschinenbauer leben 20 Jahre von ihrer IT Substanz, viel wird Inhouse entwickelt statt fertiges, standardisiertes Zeug zu nehmen - und wundern sich, dass es dann nen Big Bang gibt.
Zitat von prokrammer
das habe ich noch nie gemacht.
Egal ob das nun neue Anforderung, Sicherheit, Verschlüsselung Architektur etc etc ist. Was auch immer.
Kannst Du es nicht, dann musst es lernen oder Dir Hilfe ins Haus holen :-)
Weiterbildung gehört zum Job.

Thema: In Applikation Teilbereiche als anderer user ausführen
Am im Forum: Rund um die Programmierung

Du hast nen übliches Setup im Maschinenbau, ich komm auch da her. Nur ist eure Isolation komisch....

Zitat
Jetzt habe ich das Problem, das ich mit meinem normalen Firmennetzuser kein Zugriff mehr auf diesen Fileserver habe.
Dazu hätte ich gerne die Impersoantion genutzt
Das sind dann offenbar bewusst isolierte Maschinen; die können dann eben von außen auch nicht verwendet werden.
Die Authentifizierung geht dann auch nur lokal.

Gerade nochmal gegoogelt, zumindest geht das offenbar mit advapi32
using-advapi32-dlllogonusera-to-impersonate-a-remote-machines-local-user
Zitat
Ich hatte vesucht bei mir am Rechner den Bereich als Netzlaufwerk zu verbinden, mit den Userdaten des lokalen Users, das hat auch nicht funktioniert.
Damit aber Remote Auth geht, muss das konfiguriert sein.

Kann mir vorstellen, dass das bewusst nicht aktiv ist - sonst würde man ja die lokalen User untergraben.
Und Username:Password handlich ist ja gerade das unsichere, was man vermeiden will...

Thema: Exception bei Json Deserialisierung
Am im Forum: Grundlagen von C#

Vorweg: Du hast viele Alltagsfragen, die Du eigentlich lösen kannst, wenn Du die Beispiele in den Docs durch machst bzw. die Docs liest.
So kommst Du eigenständig eventuell schneller voran, als wenn Du wartest, bis jemand in nem Forum antwortet.

Im Titel steht "Exception bei Json Deserialisierung". Welche Exception denn? Im Beitrag steht nix - und hellsehen können wir leider noch nicht.
Ins Blaue geraten: er beschwert sich weil es keinen Parameterlosen Constructor gibt?
In Exceptions steht aller meistens der Grund drin, weshalb es knallt - und oft sogar mit der Lösung, wie diese behoben wird.

Deine Klasse kann enorm vereinfacht werden:


[Serializable]
public class Presetting
{
    public string SetPfad {get;set;}
    public string SetRGBDatei {get;set;}
    public string SetEventDatei {get;set;}
    public  string SetTimingDatei {get;set;}
    public byte SetRGBMaxHell {get;set;}
    public byte SetAnzLed {get;set;}
    public byte SetAnzRelais {get;set;}
    public int SetZeitraffer {get;set;}
    public string SetProfilName {get;set;}
    public byte SetLastOne {get;set;}
}
Was das ganze Set vor den Eigenschaftsnamen soll, is mir aber nen Rätsel.

PS: bitte keine Pfade von Hand zusammen wursteln, das geht meist schief.
Path.Combine() (Docs) gibts aus Gründen.

Thema: Programm stürzt ab, oder rechnet und rechnet
Am im Forum: Grundlagen von C#

Zitat von sane
Aktuell ist die Liste explains mit ca. 1500 Objekten befüllt und ich durchlaufe sie 4000mal.
Nich so doll. Je weniger Listen durchlauft werden müssen, desto besser. Deine Liste ist eine simple Abfrage, die aber in der Form nur auf einem Kern läuft.
Mit Hilfe von TPL kann man diese Where-Abfrage sehr einfach und effizient parallelisieren.

Von Micro-Optimierungen halt ich nun mal Abstand.
Zitat von sane
Ideal wäre aber, wenn ich die Liste mit 100k Objekten befüllen könnte und diese dann 1mio mal durchlaufen könnt.
Warum müssen 100.000 Items im Speicher gehalten werden? Warum nutzt Du nicht ein geeignetes Query mittel (eben SQL) dazu?
Datenbanken sind für sowas optimiert.
Zitat von sane
Meine Gedanken, kann so etwas nicht mit grafischer Programmierung verglichen werden?

Nein, eher nicht.
Zitat von sane
Wird da nicht jedem Pixel einen Wert zugewiesen und bei jeder Veränderung alles neu berechnet? Wie werden die Pixel gespeichert? Wie werden sie durchlaufen? Sie arbeiten doch auch mit Millionen an Werten die in Sekundenbruchteilen neu gerechnet werden?
Ist nun Deine Frage, wie Dein Code besser wird und nicht mehr abstürzt, oder wechseln wir das Thema und es geht eigentlich um Pixel?

Thema: Klasse in Datei schreiben und lesen
Am im Forum: Grundlagen von C#

Wir können nur antworten: sieht so aus, dass es kompilieren könnte.
Ob die Struktur passt, können wir Dir nicht sagen, das musst selbst wissen.

Kann evtl nur das Feedback geben: willst wirklich für jedes Setting ne eigene Datei haben?
Dir ist schon bewusst, dass Windows Forms (wie alle .NET App Runtimes) auch eine eingebaute Settingsverwaltung hat? Schon mal in die Docs geschaut?
Application Settings - Windows Forms .NET Framework

Und wenn ich sowas seh Globals.fileNameRGB, dann weiß ich, dass da strukturell was nicht stimmt :-)
Globale Klassen sind ein deutliches Zeichen für einen Fehler im Code Aufbau.

Aber wenn es nur ein Mini Tool für Dich ist, dann tuts Dir wahrscheinlich auch nicht weh.

Thema: RichTextBox WordWrap - new Line \r\n
Am im Forum: GUI: WPF und XAML

Ist ja auch nur eine visuelle Darstellung, die sich auf jedem Gerät (Stichwort DPI) anders verhält. Entsprechend gibt es auch keinen Automatismus dafür (IIRC steht das auch nirgends, woher nimmst Du die Annahme, dass das so wäre?).
Im Endeffekt musst die Textbreite selbst messen, vermutlich mit Hilfsmethoden wie GetLineFromCharIndex.

Thema: Klasse in Datei schreiben und lesen
Am im Forum: Grundlagen von C#

[FAQ] CS0234 / CS0246 - Der Typ- oder Namespacename "Foo" konnte nicht gefunden werden
NuGet -> https://www.nuget.org/packages/System.Text.Json