Gruplandırmalar ile Çoklu Seçim Listeleri - Spectre Console Serisi
Spectre Console, sıradan 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ılara renkler, yerleşimler ve etkileşimli seçimlerle istemlerde bulunabilirsiniz. Bu makalede, en güçlü giriş özelliklerinden biri olan — çok seçimli istemleri — ve özellikle seçim gruplarının nasıl kullanılacağını inceleyeceğiz.
Bunu, Tim Corey'nin "Gruplamalarla Çoklu Seçim Listeleri – Spectre Console Serisi" başlıklı video incelemesine devam ederek yapacağız. Tim açıklıyor, kodu gösteriyor ve çalıştırıyor, böylece bunu kendi projenizde nasıl uygulayabileceğinizi görebilirsiniz. Aşağıda, her başlık videoda konunun belirdiği yaklaşık zamanı belirtir, böylece doğrudan ona atlayabilirsiniz.
Çoklu Seçim İstemi Tanıtımı
Videonun başında, Tim Corey Spectre Console'un C# konsol uygulamalarınızı görsel açıdan çekici, bilgilendirici uygulamalara dönüştürebileceğini hatırlatıyor (0:02). Serisi, kütüphaneyi on dakikalık parçalar halinde parça parça ele alır. Bu özel video, kullanıcıya bir liste veya birden fazla listeden bir veya daha fazla seçim yapmasını sormaya odaklanıyor (0:18).
Basit bir Çoklu Seçim İstemi Oluşturma
Tim, kodunda zaten sahip olduğu iki listeyi göstererek başlıyor:
List<string> usualNames = new() {
"Tim Corey",
"Sue Storm",
"Bilbo Baggins",
"John Doe",
"Princess Donut",
"Steve Rogers"
};
List<string> familyNames = new() {
"Charity",
"Jon",
"Chris"
};List<string> usualNames = new() {
"Tim Corey",
"Sue Storm",
"Bilbo Baggins",
"John Doe",
"Princess Donut",
"Steve Rogers"
};
List<string> familyNames = new() {
"Charity",
"Jon",
"Chris"
};(You can see these on screen at about 0:38.)
Kullanıcının sıfır, bir veya birden çok öğe seçebileceği için favoriteNames adlı bir List
Tim, her seçeneğin bir string nesnesi olacağını ve istemin kullanıcının seçtiği seçeneklerin bir dizi veya listesini döndüreceğini vurgular (1:20–1:26).
Sonra kullanıcıyı yönlendirmek için özel bir başlık ekler:
.Title("Which are your favorite placeholder names?").Title("Which are your favorite placeholder names?")Bu, istemin üst kısmında net bir başlık oluşturur (1:31–1:50).
Kullanıcı Yönlendirmesi için Talimat Metni Ekleme
Tim sadece bir başlıkla kalmaz. Kullanıcıya istemle nasıl etkileşimde bulunacaklarını anlatmak için de talimat metni ekler (1:50).
Şöyle bir şey yazar:
.InstructionsText("(Press <space> to toggle, <enter> to accept)").InstructionsText("(Press <space> to toggle, <enter> to accept)")1:56'da, bunları renklerle veya diğer stillerle formatlayabileceğinizi açıklar — Spectre Console vurgu rengini özelleştirmeyi destekler, böylece talimatlarınız kritik bölümleri vurgulamak için yeşil, mavi, sarı, gri veya kırmızı renkte görünebilir.
Önemli olan kısımsa kullanıcıya şunu söylemektir: Öğeleri değiştirmek için boşluk tuşuna, cevabınızı kabul etmek için enter tuşuna basın (2:12). Bu, kullanıcı için betiği kolaylaştırır.
Seçenek Ekleme ve Sonuçları Gösterme
Sonraki adımda, Tim gerçek verileri ekler. Başlangıçta bunu tek bir listeyle basit tutar. .AddChoices(usualNames) kullanır (2:24–2:34).
Sonra, kullanıcının seçimlerini konsol ekranına döndüren basit bir foreach döngüsü yazar (2:38–2:52):
foreach (var name in favoriteNames)
{
Console.WriteLine(name);
}foreach (var name in favoriteNames)
{
Console.WriteLine(name);
}Formatlama konusunda endişelenmiyor — sadece çoklu seçim isteminin çalıştığını gösteriyor (2:53–3:00).
Tim programı terminalde çalıştırır (3:00). İstem, isim listesini gösterir. Boşluk çubuğunu birkaç öğe seçmek için kullanır — "Tim Corey" ve "Sue Storm" gibi — ardından Enter tuşuna basar ve konsol seçilen seçenekleri yazdırır (3:07–3:15). Bu, en basit çalışan sürümü gösterir.

Seçim Grupları ile Birden Fazla Listeye Geçme
Temel kurulum çalıştığında, Tim işleri "biraz daha ilginç" hale getirir (3:22). Sadece tek liste yerine, iki listesi vardır: usualNames ve familyNames.
Orijinal .AddChoices() çağrısını yoruma alır ve .AddChoiceGroup() tanıtır (3:32–3:38). Bu, ilgili öğeleri bir etiket altında gruplamasına olanak tanır. Şöyle yazar:
.AddChoiceGroup("The usual names", usualNames)
.AddChoiceGroup("Family names", familyNames).AddChoiceGroup("The usual names", usualNames)
.AddChoiceGroup("Family names", familyNames)Şimdi, her grup istemde ayrı ayrı görünecek. Bu yapı, düzinelerce seçeneği sunarken ve onları sayfalar veya gruplar halinde düzenlemek istediğinizde özellikle faydalıdır. Mümkün olmasa da, Spectre Console'un çoklu seçim istemi bir PageSize özelliğine de sahiptir, böylece ekranda daha fazla seçim olduğunda bir kerede kaç öğe gösterileceğini kontrol edebilirsiniz.
Çalışma Zamanında Grup Seçiminin Nasıl Çalıştığı
Tim kodu kaydeder ve tekrar çalıştırır (4:11). Yeni istem her iki grubu da net etiketlerle gösterir. Eğer "The usual names" etiketine gidip boşluk tuşuna basarsanız, o gruptaki tüm öğeler bir kerede seçilir (4:17–4:19).
Ayrıca, Spectre Console'un liste ekranı ekrandan daha uzun olduğunda otomatik olarak kaydırma işlemi gerçekleştirdiğini de belirtir — gri renkte "daha fazla seçim göstermek için yukarı ve aşağı hareket edin" mesajını göreceksiniz (4:25–4:31). Kaydırmalı 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 seçmeyi de gösterir (4:39–4:43). Enter tuşuna bastığında, konsol tüm seçilen isimleri birleştirilmiş olarak yazdırır (4:45). Bu, daha fazla seçeneği nasıl görüntülediğini, bunları nasıl geçiş yaptığınızı ve ardından seçilen öğelerden oluşan tek bir listeyi geri döndürdüğünü gösterir.

Çoklu Seçim İstemi vs. Seçim İstemi Anlamak
5:00'da Tim gösterdiklerini özetler. Çoklu seçim istemi, normal seçim istemi gibi çalışır, ancak geçirdiğiniz türde bir liste döndürür (5:03–5:08).
Onun yaptığı gibi talimat metni ekleyebilir ve bir tuş strokuyla tüm grupları isteğe bağlı olarak seçmek için seçim gruplarını kullanabilirsiniz (5:14–5:18). Bu, kullanıcı için büyük veya karmaşık menüleri çok daha yönetilebilir hale getirir.
Bu, aynı zamanda Spectre Console'un karmaşık nesnelerle çalışabilme yeteneğini de ortaya koyar: seçim nesneniz bir string'den daha fazlası olabilir. Görüntülenecek olanı denetlemek için bir ChoiceLabel özelliğine sahip nesne sağlayabilirsiniz; kullanıcı yanıtı kabul ettiğinde ise tam nesneyi geri alırsınız.
Seçenek Gruplarının ve Etiketlerin Esnek Kullanımı
Tim, .AddChoiceGroup() kullanmak için iki gruba sahip olmanız gerekmediğini de açıklar (5:20–5:24). Tek bir grup ile bile tüm grubu bir kerede seçebilmenin avantajını elde edersiniz.
Grup adı olarak daha genel olmak için "Tümünü Seç" gibi bir şey yapabileceğinizi gösteriyor (5:34–5:42). O üst girdiyi seçmek, alttaki tüm öğeleri geçiş yapacaktır (5:44–5:47). Renk vurgulamasını da kullanabilirsiniz — örneğin, grup etiketini yeşil veya mavi yaparak ayırt etmek için — kullanıcıyı varsayılan veya gerekli olan gruba yönlendirmek için yapabilirsiniz. İstemlerinizi nasıl yapılandıracağınız konusunda size çok fazla esneklik sağlar.
Özetle
Tim videoyu çoklu seçim istemlerini Spectre Console ile, özellikle gruplandırılmış seçim için seçim grupları ekleyerek nasıl yapacağımızı özetleyerek bitirir (5:50–5:53). Her zaman olduğu gibi, kaynak kod açıklamalarda (5:57).
Tim Corey'nin Gezintisinden Ana Çıkarımlar
Spectre Console çoklu seçim, kullanıcıların sıfır, bir veya birden fazla öğeyi bir listeden seçmelerine olanak tanır.
Kullanıcılara rehberlik etmek için bir başlık ve talimat metni ekleyin; Gerekli bilgileri vurgulamak için vurgu rengi kullanabilirsiniz.
Basit bir liste için .AddChoices() kullanın; birden fazla veya gruplandırılmış listeler için .AddChoiceGroup() kullanın.
Kullanıcılar, seçimleri değiştirmek için Boşluk tuşuna ve kabul etmek için Enter tuşuna basar.
Grup etiketleri, etkinleştirildiğinde tüm öğeleri bir anda seçmek için kullanılabilir.
İstem, altta yatan nesneyi geri döndürürken, bir ChoiceLabel özelliği ile karmaşık nesneleri görüntüleyebilir.
- Sayfa boyutu ve kaydırma, bir sayfada sığmayacak kadar fazla seçim olduğunda yardımcı olur.
Tim Corey'nin örneğini — 'usual names' ve 'family names' listelerinin kendileriyle birlikte — takip ederek, Spectre Console uygulamalarınızda hızlıca temiz, kullanıcı dostu çoklu seçim listelerini uygulayabilirsiniz.

