|
Kaynak Dosyalarının Kullanımı(Resource Files) |
|
Gönderiliyor lütfen bekleyin... |
|
|
Bir uygulamanın içindeki kaynaklar neler olabilir; resimler, müzikler ve yazılar(string).
Bu makalede bu tür kaynakların, harici olarak programımıza nasıl ekleneceğini
öğreneceğiz. Derlenmiş bir program içerisinde bir yazıyı değiştirmek çok zordur.
Bu yüzden sonradan değişme ihtimali bulunan kaynakları yönetmek için .NET platformu
bizim için büyük kolaylıklar sağlamıştır. Bazı durumlarda da programımızın farklı
dillerdeki versiyonları olabilir. Bu durumda her dil için bir string kaynak
dosyası(resource file) hazırlamamız yetecektir.
Bu makalede, .NET ile birlikte gelen ve kaynak dosyaları oluşturmada kullanılan
resgen.exe adlı programı, System.Resources isimalanında bulunan ResourceWriter
isimli sınıfı, ve bu oluşturulan kaynak dosyaları kullanmak için yine System.Resources
isimalanında bulunan ResourceManager adlı sınıflarının kullanımını göreceğiz.
Ve tabiki bunları anlatırken basit bir uygulama üzerinden anlatacağım.
Yukarıda da bahsettiğim gibi kaynak dosyalarda resim ve yazılar
bulunabilir.İlk adımda basit bir .txt dosyasına istediğimiz yazıları alt alta yazalım.
Resgen.exe yardımıyla bu txt dosyasından .NET platformu için özel bir kaynak
dosyası oluşturacağız. Yalnız dikkat etmemiz gereken nokta şu : bu şekilde hazırlanacak
bir kaynak dosyasına resimleri ekleyemiyoruz. Eğer kaynaklarımız sadece yazılar
ise bu yöntemi kullanıyoruz. Eğer kaynak olarak resim eklemek istiyorsak birazdan
anlatacağım ResourceWriter sınıfını kullanarak basit bir program yazacağız.
Şimdi aşağıdaki terimler.txt dosyasını oluşturun.
Pointer =
Gösterici
Function = Fonksiyon
Array = Dizi
Template = Şablon |
yazilar.txt
Şimdi resgen.exe yardımıyla yazilar.txt den yazilar.resources adlı kaynak dosyayı
oluşturalım. resgen.exe yi çalıştırmak için Start-> Programs -> Microsft
Visual Studio.NET -> Visual Studio.NET Tools -> Visual Studio.NET Command
Prompt yolunu kullanabilirsiniz.
Konsol ekranına
resgen yazilar.txt
yazarak yazilar.resources dosyasının oluşmasını sağlayan. yazilar.resources
dosyasını bu şekilde kullanabileceğimiz gibi XML formatında bir kaynak dosyası
da oluşturabiliriz. Bunun içinde konsol ekranına aşağıdaki komutu yazın.
resgen yazilar.resources yazilar.resx
Kaynak
dosyalarının
nasıl kullanıldığına geçmeden önce resimlerin de eklenebileceği bir
kaynak dosyası hazırlayan bir program yazalım. Bu programda yukarıda da dediğim
gibi System.Resources isimalanı altında bulunan ResourceWriter sınıfını kullanacağız.
Bunun için aşağıdaki programı yazıyorum.
using
System;
using System.Drawing;
using System.Resources;
class
Class1
{
static void Main(string[]
args)
{
ResourceWriter resw =
new ResourceWriter("yazilar2.resources");
Image resim = Image.FromFile("logo.gif");
string
anahtar,deger;
for(int
i=0 ; i<=3 ; i++)
{
Console.Write("Kaynak
için anahtar kelime girin: ");
anahtar
= Console.ReadLine();
Console.WriteLine();
Console.WriteLine("Girdiginiz
anahtarin degerini girini: ");
deger
= Console.ReadLine();
resw.AddResource(anahtar,deger);
}
resw.AddResource("Cslogo",resim);
resw.Close();
}
}
|
Biraz programı açıklamakta fayda var. Visual Studio.NET 'de yeni bir Console Uygulaması
açın. Resimlerle iş yapabilmek için daha doğrusu Image sınıfını kullanabilmek
için System.Drawing isimalanını eklememiz gerekir. Bunun için Project->Add
Reference menüsünü kullanıp System.Drawing.dll i için projemize referans verelim.
Kaynak dosyayı oluşturmak için ise System.Resources isimalanında bulunan ResourceWriter
sınıfını kullanıyoruz. Programımızın başında yeni bir ResourceWriter nesnesi oluşturuyoruz.
Varsayılan yapıcı işlevine ise oluşturacağımız kaynak dosyasının ismini veriyoruz.
Daha sonra kaynak dosyasına ekleyeceğimiz bir resim dosyasından Image türünden
bir nesne tanımlıyoruz. Yine aynı şekilde Image sınıfının yapıcı işlevine resim
dosyasının adını gönderiyoruz. Dosyanın çalışan programla aynı klasör içinde olmasına
dikkat edin. Aksi halde FileNotFoundException hatası alırız. Daha sonra bir for
döngüsü yardımıyla 4 defa kullanıcıdan kaynak için anahtar ve değer girilmesini
istiyoruz. Kaynak dosyasına kaynakları eklemek için ResourceWriter sınıfının overload
edilmiş iki üye işlevini kullanıyoruz. Bu iki üye işlevinin prototipi aşağıdaki
gibidir.
public void AddResource(string, object); // bu fonksiyonu kaynağa Image nesnesini
eklemek için kullanıyoruz.
public void AddResource(string, string); // bu fonksiyonu ise iki string anahtar-değer
ikilisini kaynak dosyasına girmek için kullanıyoruz.
Son olarak Close işlevi ile hafızada bulunan bilgiler yazilar.resource dosyasına
yazılır. Bu işlevi kullanmadığımızda bilgiler dosyaya kaydedilmeyecektir.
Bu şekilde oluşturduğumuz kaynak dosyasının resgen.exe ile oluşturduğumuzdan tek
farklı kaynak dosyasına bir resim bilgisinin binary olarak yerleştirilmesidir.
Kaynak dosyası oluşturmanın iki yöntemini gördükten sonra şimdi bu kaynak dosyaları
bir uygulamada nasıl kullanacağımızı görelim. Bu amaçla yeni bir Windows Uygulaması
başlatalım. Amacımız bir picturebox yardımıyla kaynak dosyadaki binary resim bilgilerini
göstermek ve yazıları da bir label kontrolu üzerinde göstermek. Öncelikle
Visual Studio.NET 'de bulunan solution explorer penceresinden projemize
hazırladığımız kaynak dosyasını eklememiz gerekir. Bunun için solution explorer'daki projemize
sağ tıklayıp Add->Add Existing Item 'dan yazilar2.resource adlı kaynak dosyasını
seçelim. Bu yöntemle kaynak dosyası projemize Embed Resource olarak eklenecektir.
Properties penceresindeki Build Action özelliğini kullanarak bu ayarı değiştirebiliriz.
Kaynak dosyasını ekledikten sonra aşağıdaki gibi bir form penceresi tasarlayın.
Form üzerine bir picturebox ve 4 tane label kontrolu ekleyin.
Formumuzu tasarladıktan sonra Form1 'in load metodunu aşağıdaki gibi düzenleyin.
private void
Form1_Load(object sender, System.EventArgs e)
{
ResourceManager rsm = new
ResourceManager("winAppRes.yazilar2",Assembly.GetExecutingAssembly()); pictureBox1.Image =
(Image)rsm.GetObject("Cslogo");
label1.Text =
rsm.GetString("Pointer"); label2.Text =
rsm.GetString("Function"); label3.Text =
rsm.GetString("array"); label4.Text =
rsm.GetString("Template");
}
|
Yukarıdaki metotda form1 yüklendiğinde ResourceManager yardımıyla kaynak dosyadaki
bilgileri ,form üzerindeki kontrollere yerleştiriyoruz. Bu kodun çalışabilmesi
için System.Reflection(Assembly sınıfı için) ve System.Resources(ResourceManager
sınıfı için) isimalanlarının projeye using ile eklenmesi gerekir. İlk olarak o
an üzerinde çalışılan assembly için bir ResourceManager nesnesi oluşturuyoruz.
Yeni bir ResourceManager nesnesi oluştururken ResourceManager 'in yapıcı işlevine
kaynak dosyanın projedeki göreceli yolunu ve o an üzerinde çalıştığımız Assembly
nesnesini geçiyoruz. Benim oluşturduğum projenin ismi winAppRes olduğu için 1.
parametre "winAppres.yazilar2" olmalıdır. (Dikkat edin 1. parametrede
kaynak dosyasının uzantısı olan .resource ekini yazmadık ). 2. parametreye ise
Assembly(System.Reflection) sınıfının statik üye işlevi olan GetExecutingAssembly
ile dönen Assembly nesnesini geçiyoruz. Kaynak dosyasındaki verileri formun üzerindeki
kontrollere yerleştirirken ResourceManager sınıfının iki ayrı üye işlevini kullanıyoruz.
Bunlardan GetObject işlevi ile picturebox 'a kaynaktaki resmi aktarıyoruz. GetObject
işlevinin parametresi kaynak dosyasındaki resime ait verinin anahtar adını geçiyoruz.
Hatırlarsanız kaynak dosyayı oluşturuken resim için "Cslogo" anahtarını
kullanmıştık. GetObject ile geriye dönen nesne object türünden olduğu için resim
bilgisini picturebox 'a yerleştirebilmek için (Image)rsm.GetObject("Cslogo")
ifadesiyle tür dönüşümü yapıyoruz. GetString işlevi ile de kaynak dosyasındaki
yazıları alıyoruz. Bu işlevden geriye dönen değer parametre olarak verilen anahtara
ait string değeri olduğu için label kontrollerinin text özelliğine atayabiliriz.
Programı derledikten sonra aşağıdaki ekran görüntüsünü elde etmelisiniz.
Not
: Eğer kaynak dosyasını resgen.exe ile XML formatında hazırlasaydık yukarıdaki işlemlerin
aynısı yine geçerli olacaktı. Benim tavsiyem kaynak dosyalarını XML formatında
hazırlamanız yönündedir. Hem Visual Studio.NET ortamında kaynak dosyayı daha
rahat düzenleyebilirsiniz hem de XML formatındaki dosyaya istediğiniz ortamlardan
rahatlıkla ulaşabilirsiniz.
Makale:
Kaynak Dosyalarının Kullanımı(Resource Files) C#, Visual C# ve .NET Sefer Algan
|
|
|
-
-
Eklenen Son 10
-
Bu Konuda Geçmiş 10
Bu Konuda Yazılmış Yazılmış 10 Makale Yükleniyor
Son Eklenen 10 Makale Yükleniyor
Bu Konuda Yazılmış Geçmiş Makaleler Yükleniyor
|
|