Merhabalar, C# Skin Windows Forms – Basit Skin Yapalım dersim ile farklı bir konuya değinmek istiyorum. Bu dersimizde kendi basit skin yani temamızı nasıl yapabiliriz temel olarak inceleyeceğiz. Yani ben yolu göstermiş olacağım. Sizlerde istediğiniz şekilde bu yolda ilerleyebilirsiniz. Github’a yükleyeceğim örnek proje çalışmasını indirerek kodları kendi projelerinize uyguladıktan sonra kendi temalarınızı geliştirmeye başlayabilirsiniz.
C# Skin Windows Forms – Basit Skin Yapalım
Şunu söylemem gerekiyor ki bu sadece bana gelen bir sorudan dolayı aklıma gelen bir işlem oldu. Aşırı düzenleme yapmak performans sorunlarına yol açabilir. Benim amacım sadece size bu konu hakkında bir fikir vermektir. Bana sen kullanır mısın böyle bir şeyi derseniz özel bir istek olmadığı sürece kullanmayı düşünebileceğimi sanmıyorum. Kullanmış olsam bile ufak tefek dokunuşlar şeklinde olur. Kaldı ki DevExpress kullandığımdan dolayı oturup buna uğraşmama gerek yok çünkü DevExpress zaten bu özelliği yapabileceklerimin çok ötesinde bir güzellikte sunuyor. Üstelik bunu DevExpress ile geliştirdiğim her projemde kullanıyorum.
Öncelikle bir form açalım ve içini nesnelerle dolduralım. Ben test amacı ile formuma TextBox, Button, Label, ComboBox, GroupBox ve DataGridView ekledim. Vereceğim kodlarda bu nesneleri düzenleyecek kodlar olacaktır. Diğer nesneler için kendiniz eklemeniz gerekiyor.
Bu formdaki ComboBox ve DataGridView nesnelerini doldurmak için internetten örnek bir tablo aldım. DataTable ile üretilmiş bir tablo. Aşağıda nesnelerimizi eklemiş olduğumuz Form1.cs dosyasındaki tüm kodları görebilirsiniz.
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace SkinForWindowsForms { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { dataGridView1.DataSource = GetTable(); ComboFill(); MySkins.SetSkin(this, "Gray"); } static DataTable GetTable() { // Step 2: here we create a DataTable. // ... We add 4 columns, each with a Type. DataTable table = new DataTable(); table.Columns.Add("Dosage", typeof(int)); table.Columns.Add("Drug", typeof(string)); table.Columns.Add("Patient", typeof(string)); table.Columns.Add("Date", typeof(DateTime)); // Step 3: here we add 5 rows. table.Rows.Add(25, "Indocin", "David", DateTime.Now); table.Rows.Add(50, "Enebrel", "Sam", DateTime.Now); table.Rows.Add(10, "Hydralazine", "Christoff", DateTime.Now); table.Rows.Add(21, "Combivent", "Janet", DateTime.Now); table.Rows.Add(100, "Dilantin", "Melanie", DateTime.Now); return table; } void ComboFill() { comboBox1.DataSource = GetTable(); comboBox1.DisplayMember = "Dosage"; comboBox2.DataSource = GetTable(); comboBox2.DisplayMember = "Dosage"; comboBox3.DataSource = GetTable(); comboBox3.DisplayMember = "Drug"; comboBox4.DataSource = GetTable(); comboBox4.DisplayMember = "Drug"; comboBox5.DataSource = GetTable(); comboBox5.DisplayMember = "Patient"; comboBox6.DataSource = GetTable(); comboBox6.DisplayMember = "Patient"; comboBox7.DataSource = GetTable(); comboBox7.DisplayMember = "Date"; } } }
Bu sayfada hazırladığımız skin yani temayı uygulayan kod şudur;
MySkins.SetSkin(this, "Gray");
C# Skin Windows Forms
Form1_Load eventi içindeki bir satırlık kod tüm forma hazırladığımız temayı uyguluyor. Şimdi, Solution Explorer ‘da projemize sağ tıklayıp, Add > Class… diyelim. Karşımıza gelen Class ekleme ekranından Class dosyamızın adını MySkins olarak yazalım ve Add butonuna tıklayalım. Şimdi projemize MySkins adında bir Class dosyası eklemiş olduk. Class dosyamızı açalım ve aşağıdaki kodları olduğu gibi Class’ın içine kopyalayalım.
using System; using System.Collections.Generic; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace SkinForWindowsForms { public class MySkins { /// <summary> /// /// </summary> /// <param name="frm">Skin uygulanacak Form nesnesi. this</param> /// <param name="Type">"Hangi skin uygulanacak. Gray, Light, Blue"</param> public static void SetSkin(Form frm, string Type) { switch (Type) { case "Gray": GraySkin(frm); break; case "Light": //LightSkin(frm); break; case "Blue": //BlueSkin(frm); break; } } static void GraySkin(Form frm) { frm.BackColor = Color.DarkGray; frm.FormBorderStyle = FormBorderStyle.SizableToolWindow; foreach (Control item in frm.Controls) { item.BackColor = Color.DarkGray; item.ForeColor = Color.White; switch (item.GetType().Name) { case "Button": item.Font = new Font("Microsoft Sans Serif", 9, FontStyle.Bold); break; case "DataGridView": DataGridView dgv = item as DataGridView; DataGridViewCellStyle style = new DataGridViewCellStyle(); style.BackColor = Color.DarkGray; style.ForeColor = Color.White; style.SelectionBackColor = Color.LightGray; style.SelectionForeColor = Color.Black; dgv.BorderStyle = BorderStyle.None; dgv.GridColor = Color.Black; foreach (DataGridViewRow row in dgv.Rows) { foreach (DataGridViewCell item1 in row.Cells) { item1.Style = style; } } break; case "GroupBox": break; case "ComboBox": break; case "Label": break; } } } } }
Class dosyamız içinde yer alan aşağıdaki satırı bulun ve SkinForWindowsForms yazan kısma kendi proje adınızı yazın.
namespace SkinForWindowsForms
Bu düzeltmeyi de yaptıktan sonra yeni açtığımız formlarınn Load eventi içerisinde aşağıdaki kodu ekleyerek o form için temayı aktif etmiş oluyoruz.
MySkins.SetSkin(this, "Gray");
Uygulanmış tema aşağıdaki gibidir.
Ben bu projede sadece gri renk tonları ile ilgili bir tema oluşturdum. Farklı renk tonlarında tema eklemek isterseniz, GraySkin adlı metodu kopyalayıp tekrar yapıştırın. Adını yeni ekleyeceğini renk tonlarına göre yeniden isimlendirin. Örn, LightSkin, BlueSkin. Bunu yaptıktan sonra formların Load eventi içerisine eklediğiniz satırdaki string alanı değiştirin. Böylece yeni hazırladığınız farklı renk tonu teması etkin hale gelecektir.
Bu temaları projenize ekledikten sonra kullanıcıların tema seçebileceği bir form ekleyip, kullanıcının istediği temayı seçmesini sağlayabilirsiniz. Program açılışında da bir yere yazmış olduğunuz kullanıcı tema tercihini okuyarak açılışta ilgili temayı etkin hale getirebilirsiniz.
C# Skin Windows Forms – Basit Skin Yapalım yazımda bu kadar arkadaşlar. Diğer yazılarımızda görüşmek üzere.
Bana bu şekilde sorduğunuz soruların üzerinde birazda ben eklemeler yaparak ders olarak yazıyorum. Hem soruyu soran kişi hemde diğer arkadaşlar faydalanmış oluyorlar.
C Sharp Eğitim Seti eğitimi sayfasına gitmek için tıklayınız. Derslerime özel olarak hazırladığım Github Projeme bu bağlantıdan ulaşabilirsiniz… Bu projede Github’da yerini almıştır. Bağlantıya tıklayarak projeye erişebilir ve indirebilirsiniz.
Sağlıcakla ve takipte kalın.