Laden...

Suche (textbasiertes) PropertyGrid(artiges)-Control für reine Konsolenanwendung

Erstellt von moelski vor 10 Jahren Letzter Beitrag vor 10 Jahren 1.304 Views
Hinweis von herbivore vor 10 Jahren

Originaltitel war: "Console App - Klasse zum Parameter einstellen?"

M
moelski Themenstarter:in
183 Beiträge seit 2011
vor 10 Jahren
Suche (textbasiertes) PropertyGrid(artiges)-Control für reine Konsolenanwendung

Moin !

Wir entwickeln eine Anwendung die über Class Libaries Geräte anbindet (bsp: Daten einer Wetterstation auslesen). Diese Libaries werden von einer WinForms Anwendung genutzt. Parallel dazu gibt es aber auch eine Consolen Applikation welche die gleichen Libaries zur Datenverarbeitung nutzt. Bis hier auch alles ok.
Nun werden aber demnächst Geräte eingebunden die konfiguriert werden können. Nehmen wir die Wetterstation um z.B. die geografische Lage vorzugeben. Dafür bekommt die Class Library einen Dialog und in der GUI Anwendung ist damit auch alles im Lot.
Jetzt bin ich am überlegen wie ich die Settings auch aus der Consolen App erreichbar machen kann. Gibt es da evtl. eine fertige Klasse die mir eine Art Property Editor auf Textebene bereitstellt? Dann müsste ich das Rad nicht komplett neu erfinden.

Greetz Dominik

148 Beiträge seit 2013
vor 10 Jahren

Also ich kann zwar nicht mit genau der Klasse dienen die du scheinbar suchst, aber ich habe irgendwann mal die folgende Klasse gefunden, die die Handhabung von Konsolenparametern extremst vereinfacht!

/// <summary>
    /// Class to get a dictionary of all start parameters of a console application.
    /// Valid Parameters are:
    /// {-,/,--}param{ ,=,:}((",')value(",'))
    /// 
    /// Examples: -param1 value1 --param2 /param3:"Test-:-work" /param4=happy -param5 '--=nice=--'
    /// </summary>
    public class ConsoleArguments : StringDictionary
    {
        private readonly Regex _nameValueRegex = new Regex(@"^([/-]|--){1}(?<name>\w+)([:=])?(?<value>.+)?$", RegexOptions.Compiled);

        public ConsoleArguments(IEnumerable<string> args)
        {
            var lastName = string.Empty;
            char[] trimChars = { '"', '\'' };

            foreach (string arg in args)
            {
                var match = _nameValueRegex.Match(arg);
                if (!match.Success)
                {
                    if (!string.IsNullOrEmpty(lastName))
                    {
                        this[lastName] = arg.Trim(trimChars);
                    }
                }
                else
                {
                    lastName = match.Groups["name"].Value;
                    Add(lastName, match.Groups["value"].Value.Trim(trimChars));
                }
            }
        }
    }

Einfach mit den "args" der Konsolenanwendung instanziieren und du bekommst ein Dictionary mit allen Parametern und deren Werten. Vielleicht hilft dir das ja schon weiter.

Gruß

16.835 Beiträge seit 2008
vor 10 Jahren

Da finde ich das NuGet Paket "CommandLineParser" deutlich angenehmer - für Anwender und Entwickler.

49.485 Beiträge seit 2005
vor 10 Jahren

Hallo moelski,

Jetzt bin ich am überlegen wie ich die Settings auch aus der Consolen App erreichbar machen kann.

wenn du die Settings in der GUI-Anwendung z.B. mit dem [Tutorial] Konfigurationsmodell im .NET Framework oder in einer vergleichbaren Settings-Datei speicherst, kannst du natürlich auch aus der Konsolenanwendung darauf zugreifen.

Gibt es da evtl. eine fertige Klasse die mir eine Art Property Editor auf Textebene bereitstellt?

Das wäre dann gar nicht nötig.

herbivore

M
moelski Themenstarter:in
183 Beiträge seit 2011
vor 10 Jahren

Moin !

Danke für die Infos, nur leider ist das nicht ganz was ich brauche 😉

Ich suche etwas mit dem ich zur Laufzeit der Command Anwendung Settings anpassen kann. Ich möchte damit Einstellungen anpassen die erst zur Laufzeit relevant sind und nicht per command Line Args übergeben werden und auch nicht mittels Settings fest vorgegeben werden können.

Ich mache mal ein fiktives Beispiel zur Verdeutlichung. Ein User möchte CSV Dateien in eine Datenbank importieren. Dabei kommen aber z.B. unterschiedliche CSV Trennzeichen vor und z.B. unterschiedliche Zeilenende.
Was ich suche wäre nun eine Klasse mit der ich Eigenschaften einstellen kann. Das könnte dann so aussehen:

CSV Trenner   ;
Zeilenende    CR/LF

Der User sollte nun z.B. mit Cursor raus / runter eine Eigenschaft auswählen können und mit links / rechts aus einer gegebenen Liste selektieren. Oder bei einem Feld wo ein Text eingegeben werden muss mittels Enter eine Texteingabe anzeigen.

Halt ähnlich wie eine PropertyGrid in GUI Anwendungen.

Greetz Dominik

49.485 Beiträge seit 2005
vor 10 Jahren

Hallo moelski,

du willst also ein UI für deine laufende Konsolenanwendung, quasi Controls für die Konsole. Grundsätzlich wird es sowas geben, auch wenn das sicher nicht Mainstream ist. Ich selbst habe mal für ein altes C-Konsolenprogramm eine ListBox geschrieben. Ich habe mal gesucht, ob es sowas auch für C# gibt und bin dabei auf Creating a Console ListBox in C# gestoßen. Da kann man zumindest mal sehen, wie man sowas überhaupt realisieren könnte.

Ob du ein komplettes UI-Framwork für die Console in C# findest (also mit allen gängigen Controls wie TextBox, ComboBox, ListBox, Label, CheckBox, RadioButton, normale Button usw. nur eben für die Console), weiß ich nicht. Kann schon sein, wird aber sicher nicht so leicht zu finden sein. Für ein PropertyGrid für die Console sehe ich erst recht schwarz, aber wenn man zumindest Controls für Label, TextBox und ComboBox hat, hat man ja alle Zutaten, um daraus ein PropertyGrid zusammen zubauen.

herbivore

M
moelski Themenstarter:in
183 Beiträge seit 2011
vor 10 Jahren

Moin !

Sehr hilfreiches Beispiel herbivore. Vielen Dank.
Es muss gar nicht mal so bunt und mit eigenem Fenster sein. Werde mir das mal vornehmen und die für mich wichtigen Teile raus ziehen.

Greetz Dominik

J
641 Beiträge seit 2007
vor 10 Jahren

cSharp Projekte : https://github.com/jogibear9988