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
51s 42dk
Başlangıçtan Bitişe C# Uygulaması serisinin 21. dersinde Tim Corey, bir WinForms uygulamasında Turnuva Kontrol Paneli Formu'nu bağlamaya odaklanıyor. Bu form, uygulamanın başlangıç ekranı olarak hizmet verir ve kullanıcının mevcut bir turnuvayı yüklemek veya yeni bir turnuva oluşturmak için giriş noktası olarak işlev görür. WinForms gösterge paneli, kullanıcı eylemlerinin, kod tarafından ele alınan belirli olayları tetiklediği, event-driven (olay odaklı) fonksiyonelliğini kullanan bir Windows Forms programıdır.
Tim, bu dersin karmaşık kullanıcı arayüzü çalışmalarıyla ilgili olmadığını, daha ziyade verileri, modelleri, saklı yordamları ve formları temiz ve tutarlı bir şekilde bir araya getirmekle ilgili olduğunu açıklar. Not: WinForms, envanter yönetimi, CRM sistemleri ve muhasebe araçları gibi dahili şirket yazılımları için özellikle uygundur. Gerçek dünya uygulamasında bir WinForms kontrol panelinin nasıl çalıştığını gerçekten anlamak için, Tim turnuvaların yüklenmesi, modellerin dolması, veritabanı bağlantılarının yönetilmesi ve UI kontrollerinin bağlanması adımlarını tek tek yürütüyor.
Bu makalede, Tim'in tam olarak videosunu adım adım, bölüm bölüm takip ederek Zaman Damgalarıyla birlikte gösterge paneli formuna daha yakından bakacağız. WinForms uygulamaları genellikle hafiftir ve mükemmel performans sunar, bu da onları daha eski veya daha az güçlü donanımlar için ideal hale getirir.
En başta, Tim Ders 21'i tanıtıyor ve hedefi açıklıyor: Uygulama başladığında açılacak ilk form olacak Turnuva Panosu Formu'nu bağlamak.
Tim, bu formun kasıtlı olarak basit olduğunu belirtiyor. Sadece birkaç şey yapar:
Kullanıcının bir turnuva seçip yüklemesine olanak tanır
İzleyicilere, bunun uzun ya da aşırı derecede karmaşık bir ders olmayacağını, ancak birçok önemli bölümüne değineceğini temin ediyor.
Tim, kontrol paneli formunun iki temel sorumluluğu olduğunu açıklıyor:
Mevcut turnuvaları bir açılır menüye yükleme
Kullanıcı eylemlerine bağlı olarak diğer formları açma
Eğer bir turnuva zaten varsa, kullanıcı onu seçebilir ve Turnuvayı Yükle'yi tıklayabilir (daha sonra bağlanacaktır). Kullanıcı yeni bir turnuva oluşturmak isterse, mevcut projede zaten var olan bir formu açan "Turnuva Oluştur" seçeneğine tıklar.
Bu noktada, Tim Turnuva Yükle düğmesinin henüz bağlanmadığını ve daha sonra bir derste ele alınacağını açıklıyor.
C# proje şablonunu seçtikten sonra, Visual Studio kullanıcı arayüzünü tasarlamanız için bir form açar.
Tim, formun arkada kalan koduna geçer ve açılır listenin bir destek listesinin olması gerektiğini açıklar. Formun tasarımcıda nasıl göründüğüne dikkat edin, kullanıcı arayüzü özelleştirmesi için hazır durumda. Açılır kutu turnuvaları göstermek için tasarlandığından, destek listesinin bir List<TurnuvaModeli> olması gerekir.
Özel bir liste olan tournaments'ı oluşturuyor ve yeni bir listeyi manuel olarak oluşturmaktansa verilerin, GlobalConfig bağlantısından gelmesi gerektiğini açıklıyor. Bu bağlantı, veri kaynağının SQL mi yoksa metin dosyaları mı olduğunu soyutlar.
Tim daha sonra GetTournament_All adındaki bir metodu çağırmaya çalışır, onun henüz mevcut olmadığını fark eder ve bu metodun veri erişim katmanına eklenmesi gerektiğini açıklar.
Tim, SQL Connector'a geçiş yaparak eksik olan GetTournament_All metodunu uygular. Bu yöntemin bir liste içinde TournamentModel nesneleri döndüreceğini açıklar.
O, projede başka bir yerde kullanılan mevcut bir deseni kopyalar ve turnuvalar için uyarlar. Temel fark, bu yöntemin adlandırılmış bir saklı prosedür çağırmasıdır:
spTournaments_GetAll
Tim, bu saklı yordamın sadece temel turnuva verilerini aldığını açıklıyor:
Kimlik
Turnuva Adı
Giriş Ücreti
Aktif durum
TurnuvaModelinin çok daha fazla özellik içerdiğini, bunun sadece ilk adım olduğunu belirtiyor.
Tim, önemli bir kavram olan kısmi hidratasyonu açıklamak için duraksıyor.
Turnuva modeli takımlar, ödüller ve turlar içeriyor olsa da, bu özellikler henüz doldurulmamış durumda. Bu aşamada:
Takımlar boş
Ödüller boş
Turlar boş
Bu noktada yalnızca temel turnuva özelliklerinin doldurulması beklenir, takımlar, ödüller ve turlar gibi ilişkili varlıklar ise daha sonra yüklene kadar boş kalır.
Tim, bunun kasıtlı olduğunu ve bu ilişkili varlıkların, temel turnuva kayıtları yüklendikten sonra doldurulması gerektiğini vurguluyor.
Tim, veritabanından döndürülen her turnuvayı tekrarlayan bir foreach döngüsü tanıtır.
Ödüller için, sürecin basit olduğunu açıklıyor:
Turnuva ID'si ile ödülleri getiren bir saklı yordam çağırın
Stored procedure spPrizes_GetByTournament'u referans alıyor ve bunun verilen bir turnuvayla ilişkilendirilmiş tüm ödülleri döndürdüğünü açıklıyor.
Tim'in uygulama boyunca tekrarlayan bir şey olarak vurguladığı bu desen, temel veriyi yükleyip ardından çocuk veriyi kimliğe göre yüklemektir.
Sonra, Tim girilen takımlara geçer.
Takımları yüklemenin iki aşamalı bir süreç olduğunu açıklıyor:
Turnuvayla ilişkili takımları yükleyin
Her takım için, takım üyelerini yükleyin
Mevcut turnuvayla ilgili olan takımları almak için spTeams_GetByTournament adlı saklı bir prosedür kullanır.
Sonra, her bir takım için Tim, takım kimliği ile takım üyelerini yüklemek üzere mevcut bir yöntemi tekrar kullanır. Bu, dizinin önceki bölümlerinde yazılmış olan koda neredeyse tamamen benzediğine işaret ediyor, sadece turnuva özelindeki verilere uyarlanmış.
Tim, turların turnuva modelinin en karmaşık kısmı olduğunu açıklar.
Roundlar şu şekilde saklanır:
List<List<EşleşmeModeli>>
Onları doldurmak için, Tim'in yapması gerekenler:
Turnuvanın tüm eşleşmelerini yükle
Her bir eşleşme için eşleşme girişlerini yükle
Üst eşleşmeler ve kazananlar gibi ilişkileri çöz
İlk olarak saklı yordamları gözden geçiriyor:
spEşleşmeler_TournamentGöreGet
spEşleşmeGirişleri_EşleşmeyeGöreGetir
Tim veri tabanlarıyla çalışırken yaygın bir sorunu belirtiyor:
SQL kimlikler döndürür, ancak uygulama nesneler bekler.
Kazanan özelliği bir TeamModel'dir, ancak veri tabanı yalnızca bir WinnerId döndürür. Tim, iç içe geçmiş nesneleri SQL'den doğrudan dolduramayacağınızı açıklıyor.
Bunu çözmek için, modele geçici bir WinnerId özelliği ekliyor ve bu özellik yalnızca veri yükleme sırasında kullanılıyor. Tüm takımlar yüklendikten sonra, doğru TeamModel'ı Kazanan özelliğine atamak için ID'yi kullanıyor.
Her bir eşleşme için, Tim:
Eşleşme ID ile eşleşme girişlerini yükler
Geçerli takım ID'lerini kontrol eder
İlişkileri çözmek için tüm takımların önbelleğe alınmış listesini kullanır
Değer olmadığında ID'lerin neden varsayılan olarak 0 olduğunu ve > 0 kontrolünün neden hayati önem taşıdığını açıklar.
Tim ayrıca üst eşleşmelerin, zaten yüklenmiş eşleşmelere referans verilerek, ve eşleşmelerin turun sırasına göre sıralandığını bilerek çözüldüğünü açıklar.
Tüm eşleşmeler tamamen doldurulduktan sonra, Tim turların nasıl oluşturulduğunu açıklar.
Tanıtır:
MevcutTur değişkeni
MevcutSatır listesi
Eşleşmeler arasında döngü yaparken:
Tur numarası değişirse, önceki tur T.Turlar'a eklenir
Yeni bir tur listesi oluşturulur
Eşleşmeler buna göre gruplandırılır
Tim mantığın net olduğundan emin olmak için tam bir örnek üzerinden geçer ve döngüleri ayırmanın kodu anlamayı kolaylaştırdığına vurgu yapar.
Visual Studio'daki Araç Kutusundan sürükleyerek forma etiketler, metin kutuları ve açılır menüler gibi genel kontroller ekleyebilirsiniz.
Gösterge Tablosu Formunda, Tim bir WireUpLists() yöntemi oluşturur.
Atar:
Verikaynağı, turnuvalar listesine
GörüntülenenÖğe alanı TournamentName'e
Etiketler genellikle açılır menünün amacını açıklamak için kullanılır, metin kutuları ise formda kullanıcı girişi için kullanılabilir. Kullanıcı etkileşimlerini yönetmek için tasarımcıda bir düğmeye çift tıklayarak Form1.cs dosyasında otomatik olarak bir Tıklama etkinliği işleyici oluşturabilirsiniz.
Bu, açılır menünün nesne referansları yerine insan tarafından okunabilir isimler göstermesini sağlar.
Tim uygulamayı her iki veri kaynağı ile çalıştırıyor:
Metin dosyası bağlantısı hemen çalışır
SQL bağlantısı bir hata verir
Uygulamayı Çalıştır düğmesine tıklayarak veya Visual Studio'da F5 tuşuna basarak çalıştırabilirsiniz.
Hata mesajı üzerinden geçer, bu hatanın eksik parametreler nedeniyle olduğunu belirler ve birden fazla veri kaynağını entegre ederken bu tür hataların yaygın olduğunu not eder. Bu hata, turnuva kimliğinin saklı yordamlar için düzgün bir şekilde iletilmesiyle düzeltildi.
Hem ödüller hem de takımlar düzeltildikten sonra, Tim her iki veri kaynağının da şimdi doğru çalıştığını onaylar. Birçok veri kaynağını entegre edildiğinde hata bulmak ve düzeltmek, geliştirme sürecinin normal bir parçasıdır.
Son olarak, Tim Oluştur Turnuvası düğmesini etkinliklerini, özellikle Tıklama etkinliğini yöneterek bağlar.
Buton için olay işleme kodunun Form1.cs kod-arkası dosyasında yazıldığını, ancak Form1.Designer.cs dosyasında olmadığını açıklar. Form1.Designer.cs dosyası, Windows Forms için otomatik olarak UI kodu oluşturur ve el ile düzenlenmemelidir.
Düğme sadece:
Yeni bir Oluştur Turnuva form örneği oluşturur
Show() çağrısı yapar
Kullanıcının turnuva oluştuktan sonra nereye gitmesi gerektiği konusundaki tasarım kararlarını tartışır ve doğrudan turnuva görüntüleyicisine gitmenin en mantıklısı olduğunu açıklar.
Tim, yapılan işleri özetleyerek sonlandırır:
Gösterge tablosu turnuvaları yükler
Açılır menü doğru şekilde doldurulur
Turnuva Oluştur formu başarıyla açılır
Bir turnuva oluşturulduktan sonra listenin yenilenmesinin daha sonra ele alınacağını belirtir.
Bir sonraki derste, Tim, turnuva sistemini hayata geçirmek için turlar, eşleşmeler, skorlar ve ilerlemenin uygulanacağı Turnuva İzleyici Formunu önizler. Dersin ilerleyen versiyonları, WinForms ve .NET'in yeni versiyon sürümleriyle ilgili özellik güncellemeleri ve iyileştirmeleri içerecektir.
Bu ders, WinForms gösterge tablosunun sadece bir kullanıcı arayüzü değil, modeller, veri erişimi ve navigasyon arasında bir koordinasyon noktası olduğunu gösteriyor—Tim'in dikkatle adım adım gösterdiği bir şey.
WinForms, stabilitesi, hızlı geliştirme hızı ve Windows işletim sistemi ile derin entegrasyonu nedeniyle oldukça alakalı kalmaya devam ediyor.
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