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:
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:
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.