Earn More by Sharing What You Love
Do you create content for developers working with .NET, C#, Java, Python, or Node.js? Turn your expertise into extra income!

Tim Corey
6m 21s
Spectre Console düz C# konsol uygulamalarınızı görsel olarak zengin, etkileşimli araçlara dönüştürmenize olanak tanıyan bir .NET kütüphanesidir. Statik siyah-beyaz ekranlar yerine, kullanıcıları renkle, düzenlerle ve etkileşimli seçimlerle karşılama olanağı sunar. Bu makalede, en güçlü giriş özelliklerinden birine — çoklu-seçim istemlerine — ve özellikle seçim gruplarını nasıl kullanacağınıza göz atacağız.
Bunu Tim Corey'nin "Gruplamalarla Çoklu-Seçim Listeleri – Spectre Console Serisi" adlı videosundaki yürüme saatini izleyerek yapacağız. Tim açıklar, kodu gösterir ve çalıştırır, böylece bunu kendi projenizde nasıl uygulayacağınızı görebilirsiniz. Aşağıda, her başlıkta konunun videoda ne zaman göründüğünü not alarak doğrudan atlayabilirsiniz.
Videonun başında, Tim Corey izleyicilere Spectre Console'un "C# konsol uygulamalarınızı görsel çekici, bilgilendirici uygulamalara dönüştürmenize" izin verdiğini hatırlatır (0:02). Serisi, kütüphaneyi parça parça on dakikalık dilimlerle inceliyor. Bu özel video, kullanıcının açılır bir listeden veya birden fazla listeden bir veya daha fazla seçeneği seçmeye yönlendirme istemine odaklanıyor (0:18).
Tim, kodunda zaten iki liste bulunduğunu göstererek başlar:
List<string> usualNames = new() {
"Tim Corey",
"Sue Storm",
"Bilbo Baggins",
"John Doe",
"Princess Donut",
"Steve Rogers"
};
List<string> familyNames = new() {
"Charity",
"Jon",
"Chris"
};Dim usualNames As New List(Of String) From {
"Tim Corey",
"Sue Storm",
"Bilbo Baggins",
"John Doe",
"Princess Donut",
"Steve Rogers"
}
Dim familyNames As New List(Of String) From {
"Charity",
"Jon",
"Chris"
}(You can see these on screen at about 0:38.)
Kullanıcının sıfır, bir veya birçok öğeyi seçebileceği favoriteNames adlı bir List<string> oluşturuyor (0:53–1:01). Ardından, AnsiConsole.Prompt'un sonucuna, yeni bir MultiSelectionPrompt<string>() (1:05–1:16) ile atar.
Tim, her seçimin bir dizi nesne olacağını ve istemin, kullanıcının seçtiği seçimlerin bir dizi veya liste olarak döndürüleceğini vurgular (1:20–1:26).
Daha sonra kullanıcıyı yönlendirmek için özelleştirilmiş bir başlık ekler:
.Title("Which are your favorite placeholder names?").Title("Which are your favorite placeholder names?")Bu, istemin en üstünde açık bir başlık kurar (1:31–1:50).
Tim sadece bir başlıkla yetinmez. Ayrıca kullanıcının istemle nasıl etkileşimde bulunacağını söyleyen talimat metni de ekler (1:50).
Şuna benzer bir şey yazar:
.InstructionsText("(Press <space> to toggle, <enter> to accept)").InstructionsText("(Press <space> to toggle, <enter> to accept)")1:56'da renk veya diğer stillerle biçimlendirebileceğinizi — Spectre Console'un vurgu rengini özelleştirme desteği sunduğunu açıklıyor, böylece talimatlarınız anahtar kısımları vurgulamak için yeşil, mavi, sarı, gri veya kırmızı görünebilir.
Önemli olan kısım kullanıcıya şunu söylemektir: Öğeleri değiştirmek için boşluk çubuğuna basın, cevabınızı kabul etmek için enter tuşuna basın (2:12). Bu, komut dosyasını kullanıcı için kolay hale getirir.
Sonrasında, Tim gerçek verileri ekler. Başlangıçta tek listeyle basit tutar. .AddChoices(usualNames) (2:24–2:34) kullanır.
Ardından console'a kullanıcı seçimlerini geri iletmek için basit bir foreach döngüsü yazar (2:38–2:52):
foreach (var name in favoriteNames)
{
Console.WriteLine(name);
}For Each name In favoriteNames
Console.WriteLine(name)
NextBiçimlendirme ile ilgili endişelenmez — sadece çoklu seçim isteminin çalıştığını göstermektedir (2:53–3:00).
Tim programı terminalde çalıştırır (3:00). İstem, isim listesini gösterir. Boşluk çubuğunu kullanarak birkaç öğe seçer — "Tim Corey" ve "Sue Storm" gibi — sonra Enter'a basar ve konsol seçilen seçenekleri yazdırır (3:07–3:15). Bu, en basit çalışan versiyonu sergiler.

Temel ayar çalışırken, Tim işleri "biraz daha ilginç" hale getiriyor (3:22). Sadece bir liste yerine, iki liste kullanır: usualNames ve familyNames.
Orijinal .AddChoices() çağrısını yoruma alır ve .AddChoiceGroup() tanıtır (3:32–3:38). Bu, onun ilgili öğeleri bir etiket altında gruplayabilmesini sağlar. Şunu yazar:
.AddChoiceGroup("The usual names", usualNames)
.AddChoiceGroup("Family names", familyNames).AddChoiceGroup("The usual names", usualNames) _
.AddChoiceGroup("Family names", familyNames)Artık her grup ayrı ayrı istemde görünecek. Bu yapı, düzinelerce seçeneği sunarken ve bunları sayfa veya gruplara organize etme isteğiniz olduğunda özellikle yardımcıdır. Transcript bunu göstermese de, Spectre Console'un çoklu seçim istemi ayrıca bir PageSize özelliğine sahiptir, böylece bir ekrana sığmayan daha fazla seçenek olduğunda kaç öğenin bir seferde gösterileceğini kontrol edebilirsiniz.
Tim kodu tekrar kaydeder ve çalıştırır (4:11). Yeni istek, her iki grubu da net etiketlerle gösteriyor. İmleci "The usual names" etiketine getirip boşluk tuşuna basarsa, o gruptaki tüm öğeler bir kerede seçilir (4:17–4:19).
Ayrıca, eğer liste ekrandan daha uzunsa, Spectre Console'un otomatik olarak kaydırmayı yönettiğine dikkat çekiyor — gri renkte "daha fazla seçenek görmek için yukarı ve aşağı hareket edin" mesajını göreceksiniz (4:25–4:31). Bu, kaydırılabilir listeler için varsayılan bir davranıştır.
Tim, aile isimlerine kaydırmayı, onları seçmeyi ve ardından Sue Storm gibi bir bireyi de seçmeyi gösteriyor (4:39–4:43). Enter tuşuna bastığında, konsol tüm seçilen isimleri birleştirilmiş şekilde yazdırır (4:45). Bu, işlevin daha fazla seçeneği nasıl gösterdiğini, bunları nasıl değiştirmenize izin verdiğini ve ardından seçilen nesnelerin tek bir listesini nasıl döndürdüğünü gösterir.

Tim, saat 5:00'te gösterdiklerini özetliyor. Çoklu seçim istemi, normal seçim istemi gibi çalışır ancak geçirdiğiniz herhangi bir tür değerini içeren bir liste döndürür (5:03–5:08).
O (5:14–5:18) gibi talimat metni ekleyebilir ve tüm grupları tek bir tuşla seçmek için seçim gruplarını kullanabilir ve isteğe bağlı olarak seçebilirsiniz. Bu, kullanıcı için büyük veya karmaşık menüleri çok daha yönetilebilir hale getirir.
Bu ayrıca, Spectre Console'un karmaşık nesnelerle çalışabilme yeteneğine işaret eder: seçim nesneniz bir string'den daha fazlası olabilir. Kullanıcı cevabını kabul ettiğinde tam nesneyi geri almaya devam ederken, görüntülenen içeriği kontrol etmek için ChoiceLabel özelliğine sahip bir nesne sağlayabilirsiniz.
Tim ayrıca, .AddChoiceGroup() kullanmak için iki gruba sahip olmanız gerekmediğini de açıklar (5:20–5:24). Tek bir grup bile olsa, yine de tüm grubu bir seferde seçebilme avantajından yararlanırsınız.
O, gruba "Tümünü Seç" gibi daha genel bir isim verebileceğinizi gösteriyor (5:34–5:42). Üst seçeneği seçmek daha sonra aşağıdaki tüm öğeleri (5:44-5:47) etkinleştirir veya devre dışı bırakır. Kullanıcıyı varsayılan veya gerekli gruba yönlendirmek için, örneğin grup etiketini yeşil veya mavi yaparak renk vurgulaması da kullanabilirsiniz. Bu, istemlerinizi nasıl yapılandıracağınız konusunda size çok fazla esneklik sağlar.
Tim, videoyu özetleyerek bitirir: İşte böylece, Spectre Console ile grup seçimi için seçimin gruplarının eklenmesiyle birlikte çoklu seçim istemleri yapabilirsiniz (5:50–5:53). Her zamanki gibi, kaynak kodu açıklamada (5:57) yer almaktadır.
Spectre Console çoklu-seçim, kullanıcılara bir listeden sıfır, bir veya birden fazla öğe seçme olanağı tanır.
*.AddChoices() basit bir liste için kullanılabilir; birden fazla veya gruplanmış liste için .AddChoiceGroup() kullanın.
kullanılabilir
Komut istemi, temel nesneyi döndürürken ChoiceLabel özelliği olan karmaşık nesneleri görüntüleyebilir.
Sayfa boyutu ve kaydırma, bir sayfaya sığmayan daha fazla seçeneğiniz olduğunda yardımcı olur.
Tim Corey'nin örneğini — onun genellikle kullandığı isim ve soyadlarından oluşan gerçek listeleri ile — takip ederek, kendi Spectre Console uygulamalarınıza hızlı bir şekilde temiz ve kullanıcı dostu çoklu seçim listeleri uygulayabilirsiniz.
Do you create content for developers working with .NET, C#, Java, Python, or Node.js? Turn your expertise into extra income!
Join our newsletter, you’ll get exclusive access on article updates. We value your privacy