Rehber C# çoklu tema destekli yazılım geliştirme

Katılım
28 Ocak 2020
Mesajlar
19.231
Makaleler
52
Çözümler
460
Merhabalar.
Bugün bir programı modern gösteren çoklu tema yapımını anlatmaya çalışacağım.
Öncelikle bir proje oluşturuyoruz.

1634581556623.png


Form tasarımımız bu şekilde olması yeterli.
2 adet RadioButton ekledik.
Şimdi sıra programlama kısmında.

Genel olarak ayar dosyaları için .ini formatı kullanılır. Siz farklı bir metin dosya uzantısı kullanabilirsiniz.

1634581648792.png


[CODE lang="csharp" title="Başvurular"]using System;
using System.Drawing;
using System.IO;
using System.Windows.Forms;[/CODE]

Öncelikle gerekli başvurularımızı tanımlıyoruz.

1634581671330.png


[CODE lang="csharp" title="Yüklemeden önce"] private void Form1_Load(object sender, EventArgs e){
try{
string theme_detect = @"ayarlar\tema_ayari.ini"; // AYAR DOSYASI YOLU
if (File.Exists(theme_detect)){ // DOSYA VAR MI YOK MU?
StreamReader read_theme = File.OpenText(theme_detect); // VAR İSE DOSYA OKUMA
string theme_text = read_theme.ReadLine();
string get_theme = theme_text.Trim();
read_theme.Close();
if (get_theme == "theme_white"){ // AÇIK TEMA GELİR İSE
theme_light(); check_light.Checked = true;
}else if (get_theme == "theme_dark"){ // KOYU TEMA GELİR İSE
theme_dark(); check_dark.Checked = true;
}else{ // DEĞER 2 DEĞER DIŞINDA FARKLI BİR DEĞER GELİRSE
theme_light(); check_light.Checked = true;
}
}else{ // YOK İSE YAPILACAK İŞLEM
theme_light(); check_light.Checked = true;
}
}catch (Exception){ }
}
private void theme_light(){
BackColor = Color.WhiteSmoke;
check_light.ForeColor = Color.Black;
check_dark.ForeColor = Color.Black;
}
private void theme_dark(){
BackColor = Color.FromArgb(45, 45, 45);
check_light.ForeColor = Color.White;
check_dark.ForeColor = Color.White;
}[/CODE]

Ardından form açılmadan önce yapılması gereken kodlama işlemlerini yapıyoruz. Burada 2 adet Void var. Birisi beyaz tema için diğer ise koyu tema için.

1634581733109.png


[CODE lang="csharp" title="Ayarları Kayıt Etme"] private void check_light_CheckedChanged_1(object sender, EventArgs e){
theme_light();
try{
string main_folder = "ayarlar";
if (Directory.Exists(main_folder)){ // KLASÖR VAR MI YOK MU
write_theme_light();
}else{
Directory.CreateDirectory(main_folder); // YOKSA KLASÖR OLUŞTUR
write_theme_light(); // ARDINDAN YAZMA İŞLEMİNİ YAP
}
}catch (Exception){ }
}
private void check_dark_CheckedChanged_1(object sender, EventArgs e){
theme_dark();
try{
string main_folder = "ayarlar";
if (Directory.Exists(main_folder)){ // KLASÖR VAR MI YOK MU
write_theme_dark();
}else{
Directory.CreateDirectory(main_folder); // YOKSA KLASÖR OLUŞTUR
write_theme_dark(); // ARDINDAN YAZMA İŞLEMİNİ YAP
}
}catch (Exception){ }
}
private void write_theme_light(){
try{
StreamWriter write_theme = new StreamWriter(@"ayarlar\tema_ayari.ini"); // YAZMA İŞLEMİ İÇİN GEREKLİ DOSYA KONUMUNU VE İSMİNİ BELİRLİYORUZ
write_theme.WriteLine("theme_white"); // YAZILAN DEĞERİ GİRİYORUZ
write_theme.Close(); // DOSYA ERİŞİMİNİ KAPATIYORUZ
}catch (Exception){ }
}
private void write_theme_dark(){
try{
StreamWriter write_theme = new StreamWriter(@"ayarlar\tema_ayari.ini"); // YAZMA İŞLEMİ İÇİN GEREKLİ DOSYA KONUMUNU VE İSMİNİ BELİRLİYORUZ
write_theme.WriteLine("theme_dark"); // YAZILAN DEĞERİ GİRİYORUZ
write_theme.Close(); // DOSYA ERİŞİMİNİ KAPATIYORUZ
}catch (Exception){ }
}[/CODE]

Ve son olarak verileri kayıt etme işlemine geçiyoruz. Burada klasör içerisinde kayıt etme işlemi ile yapıldı. Eğer klasör yok ise otomatik oluşturuluyor.

1634582038893.png


1634582056974.png


1634582066073.png


Görüldüğü üzere tüm işlemler otomatik olarak gerçekleşmektedir.
Görüldüğü üzere program ayarları değiştikten sonra veriyi kayıt ediyoruz. Ardından sonraki açılışta aynı tema ile açılmasını sağlıyoruz.

1634581779319.png


Açık tema bu şekilde.

1634581788034.png


Koyu tema bu şekilde.

Buna benzer olan çoklu dil destekli yazılım geliştirme rehberimizi inceleyebilirsiniz.

Umarım işinize yarar. Bu temel bir işlemdir. Çok daha gelişmiş yapılar yapabilirsiniz.
 
Son düzenleme:
Elinize sağlık, başlangıç için anlaşılır ve güzel bir çalışma olmuş. İşine yarayacak ve geliştirecek kişiler mutlaka olacaktır.
 
Hocam nicki değiştirip profili kaldırdığınızda bıraktınız sanıp üzülmüştüm. Dün yayınladığınız rehberi görmemiştim, bunu gördüm ve geri döndüğünüze sevindim.
Başarılı rehber, arkadaşlara bunu atıp yazılımcıyım diye hava atayım. (!) :D
 
Görsel eklemek yerine ya da o görselin altına kodları yapıştırırsanız çok güzel olur, toplu bir form kodu yerine. :)

Başarılı bir çalışma, ellerinize sağlık.
 
Başlangıç için fena sayılmaz ama tamamen spagetti kod. Bir çok try catch, if else ve tekrarlayan yapılar mevcut.
Örneğin basitçe şu soru sorayım, başka bir tema eklenmek istendiğinde ne olacak? Basit cevap, "Ee gideriz if else ile ekleriz nolacak sanki". Tamam o halde,10 tane daha tema ekle bakalım.
Sadece iki tema olsa dahi bu yöntem bana göre yanlış.
 

Yeni konular

Geri
Yukarı