Gå til indholdet

Introduktion til Spectre.Console

Spectre.Console er et kraftfuldt .NET-bibliotek, der gør det nemt at skabe flotte og interaktive konsolapplikationer. Det giver udviklere mulighed for at berige deres konsolprogrammer med farver, tabeller, lister, og meget mere, hvilket gør tekstbaserede grænseflader mere brugervenlige.

Spectre.Console er designet til at være nemt at integrere i eksisterende .NET-projekter. Biblioteket bygger på ideen om at give udviklere værktøjerne til at skabe dynamiske konsolapplikationer uden behov for at forstå kompleksiteten bag terminalinteraktioner.

Du finder dokumentationen til Spectre.Console på her.

Installation af Spectre.Console

For at komme i gang med Spectre.Console skal du tilføje biblioteket til dit projekt som en NuGet-pakke. Dette kan gøres ved at køre følgende kommando i terminalen:

dotnet add package Spectre.Console

Det er også muligt at tilføje Spectre.Console via NuGet-pakkehåndteringen i Visual Studio.

Tip

Hvis du benytter Spectre.Console i Visual Studio Code skal du tilrette launch.json-filen for at kunne se farverne i konsollen. Tilret/tilføj "console": "externalTerminal" eller integratedTerminal til konfigurationen for at åbne en ekstern terminal, der understøtter farver. Du vil dog altid kunne benytte dotnet run i terminalen for at se farverne.

Skriv farvet tekst i konsollen

Her er et simpelt eksempel, der viser, hvordan du kan bruge Spectre.Console til at farvelægge tekst i konsollen:

using Spectre.Console;
AnsiConsole.Markup("[bold green]Velkommen til Spectre.Console![/]");

Dette eksempel vil skrive “Velkommen til Spectre.Console!” i fed grøn tekst i konsollen. Funktionen AnsiConsole.Markup giver mulighed for at bruge en markup-lignende syntaks til at formatere teksten.

Brug af prompts

Spectre.Console giver også mulighed for at indhente brugerinput direkte fra konsollen, såsom tekst, tal og ja/nej-svar. Her er et eksempel på, hvordan du kan indhente disse tre typer af input:

using Spectre.Console;

var navn = AnsiConsole.Ask<string>("Hvad er dit [green]navn[/]?");
var alder = AnsiConsole.Ask<int>("Hvor [green]gammel[/] er du?");
var erMedlem = AnsiConsole.Confirm("Er du [green]medlem[/] af klubben?");

AnsiConsole.MarkupLine($"[bold yellow]Navn:[/] {navn}");
AnsiConsole.MarkupLine($"[bold yellow]Alder:[/] {alder}");
AnsiConsole.MarkupLine($"[bold yellow]Medlem:[/] {(erMedlem ? "Ja" : "Nej")}");

Dette eksempel bruger AnsiConsole.Ask til at hente en tekst (navn) og et heltal (alder) og AnsiConsole.Confirm til at indhente et ja/nej-svar (bool). Resultatet bliver vist i konsollen med brug af markup for at fremhæve informationen.

Oprettelse af en menu

Spectre.Console gør det let at skabe en menu, hvor brugere kan vælge en mulighed direkte fra konsollen. Her er et eksempel på, hvordan du kan oprette en simpel menu:

using Spectre.Console;

var choice = AnsiConsole.Prompt(
    new SelectionPrompt<string>()
        .Title("Vælg en [green]handling[/]:")
        .AddChoices(new[] { "Opret bruger", "Vis brugere", "Afslut" }));

AnsiConsole.MarkupLine($"Du valgte: [bold yellow]{choice}[/]");

Dette vil præsentere brugeren med en menu, hvor de kan vælge mellem “Opret bruger”, “Vis brugere”, og “Afslut”. Valget bliver derefter vist i konsollen.

Brug af en tabel

I stedet for at opbygge tabeller manuelt kan du også bruge klasser til at strukturere dine data, hvilket gør koden mere overskuelig og genanvendelig. Her er et eksempel, hvor vi bruger en Person-klasse til at populere en tabel:

using Spectre.Console;

var personer = new List<Person>
{
    new Person { Navn = "Peter", Alder = 25 },
    new Person { Navn = "Mette", Alder = 30 }
};

var table = new Table();
table.AddColumn("Navn");
table.AddColumn("Alder");

foreach (var person in personer)
{
    table.AddRow(person.Navn, person.Alder.ToString());
}

AnsiConsole.Write(table);

class Person
{
    public string Navn { get; set; }
    public int Alder { get; set; }
}

I dette eksempel definerer vi en Person-klasse med egenskaberne Navn og Alder. Vi opretter derefter en liste af Person-objekter og bruger denne liste til at fylde tabellen. Tabelens indhold vises derefter i en pæn formatering i konsollen.