Bu site emekli olmuştur. Arşiv amaçlı olarak BT AKADEMİ sponsorluğunda yayın hayatına devam etmektedir.




C#nedir?com
 
YAZAR HAKKINDA
Sefer Algan
Sefer Algan
http://www.seferalgan.com
İletişme geçmek için tıklayın.
71 Makalesi yayınlanmakta.
Yazar hakkında detaylı bilgi için tıklayın.
Yayınlanan diğer makaleleri için tıklayın.
İlgili etiketler:  C# / VC#/.NET Sefer Algan
 
YAZI HAKKINDA
Türü : Makale
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır. Bu yazılar editör incelemesine girmeden yayınlanır.
Seviyesi : Başlangıç
Kategori : C# / VC#/.NET
Yayınlanma Tarihi : 27.1.2003
Okunma Sayısı : 56004
Yorum Sayısı : 2     yorum yaz
Site İçi AramaSİTE İÇİ ARAMA
Üye Girişini AçÜye GİRİŞİ
Üye girişi için tıklayın.
Kullanıcı Adı
Şifre
 
Beni her zaman hatırla
Bir hafta boyunca kullanıcı bilgilerinizi kullanıcı çıkışı yapana kadar hatırlar. (Paylaşılan bilgisayarlarda önerilmez.)
 
Şifremi / Kullanıcı Adımı unuttum.
 
.net TV RSS Serbest KÖŞE (?)
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır. Bu yazılar editör incelemesine girmeden yayınlanır.
emre TAŞ
Silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
Makale Gönder Bende Yazmak İstiyorum
.net TV RSSBlogroll
Turhal Temizer
Conda install environment.yml Package 21.12.2024
Turhal Temizer
Mac OS/X Removing CUDA 21.12.2024
Burak Selim Şenyurt
Rust ile ECS Yaklaşımını Anlamak 21.12.2024
Burak Selim Şenyurt
Birlikte Rust Öğrenelim Serisi 21.12.2024
  Diğer Herşey
Sponsorlar
BT Akademi
Medya Portakal
Video Hosting Sponsoru
Csharpnedir.com bir Ineta üyesidir
Uzman Abi
Her Yönüyle C# - Sefer Algan
Kaynak Dosyalarının Kullanımı(Resource Files)
 
Kapat
Sayfayı Yazdır Sık Kullanılanlara Ekle Arkadaşıma Gönder MySpace Del.Ico.Us Digg Facebook Google Mixx Reddit StumbleUpon
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
  • Yazılan Yorumlar
  • Yorum Yaz
EYL
16
2005
hocam bize C#ı öğrettiniz ancak .NET ÇOK FARKLI BİR PLATFORM VE ÖĞRENDİKLERİMİZİ UYGULAMAKTA ZORLANIYORUZ.. BİR DE .neti anlatan bir kitap yazsanız bize öyle büyük bir iyilik yapmış olursunuz ki... makale müthiş....
EYL
1
2004
Sayfalar : 1 
Yorum yazabilmek için üye girişi yapmalısınız. Üye girişi için tıklayın.
Üye değilseniz Üyel Ol linkine tıklayarak üyeliğinizi hemen başlatabilirisniz.
 
  • Bu Konuda Son 10
  • 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