C# a Başlangıç Kitabı

Ebat: px
Şu sayfadan göstermeyi başlat:

Download "C# a Başlangıç Kitabı"

Transkript

1 C# a Başlangıç Kitabı Memik Yanık memiky@superonline.com memikyanik@hotmail.com Edisyon Temmuz 2009

2 2 Memik Yanık - C# a Başlangıç Kitabı Önsöz Son yazdığım C# kitabımda başlangıç düzeyi konuların ağırlığını azaltmayı tercih ettiğim için C# konusunda henüz yolun başında olanlar zorluk çekmesin diye birkaç makale hazırlayıp kişisel sitemde yayınladım. Sonra bu makaleleri elden geçirip e-book haline getirdim. E-book larda sayfa sınırlaması olmadığı için metni az sayfaya sığdırma gibi bir kaygım olmadı. Başka bir deyişle bu e-book u yakın zamanda yayınlanan C# 3.0 kitabıma yardımcı veya hazırlayıcı bir kitap olarak değerlendirmek mümkündür. Bu e-book u inceleyenlerin fark edeceklerini sandığım bir diğer konu ise C# gibi bir programlama dilinin nasıl kolay anlatıldığını görmeleri olacaktır. Başka bir deyişle bu metin için rahatlıkla dünyanın e kolay okunan C# kitabı denilebilir. Yıllardır Memik Yanık ı hep başlangıç düzeyi kitaplar yazmakla suçlayanlar bakalım bu e-book u gördüklerinde neler söyleyecekler? Yıllardır kendisini bilen bilmeyen birçok kişi Memik Yanık ı çeviri yapmakla suçluyor. Memik Yanık ın Đngilizcesinin çeviri yapmaya yetmediği gerçeğini bir tarafa bırakalım ve şu soruyu sorayım: Madem Memik Yanık Türkçeye bu kadar hakim ve yazdıkları kolay okunuyor hangi akla hizmet yabancı bir yazarın kitabında çeviri yapar? Hem Memik Yanık Đngilizceyi anadili gibi bilse bile hangi mantıkla kendine özel cümle kurmak yerine gidip başka bir yazarın cümlelerini alır? Bu e-book ta kenar boşlukları normal basılı kitaplara göre daha azdır, fontu ise daha büyüktür. Dolayısıyla bu metni normal kitap olarak değerlendirmek istemiş olsaydım sayfa sayısı aşağı yukarı aynı olurdu. E-book un sonunda C# 3.0 kitabım hakkında yazdığım bir yazı ve C# 3.0 kitabımdan alınma bir bölüm bulunmaktadır. 2. Edisyon Đçin Ek: Bu PDF yi ilk yayınladığım günden bu yana aradan geçen 6 aylık süre içinde bana gelen talepler doğrultusunda bu e-book a veritabanı işlemleri hakkında bilgi içeren bir bölüm eklemeye karar verdim. Bu amaçla oturup Temel Veritabanı Đşlemleri adlı bir bölüm hazırlayıp PDF ye ekledim ve bazı küçük değişiklikler yaptım. Bu hali ile bu E-Book programcılığa C# ile başlayanlar için daha işlevsel olmaya başladı.

3 Memik Yanık - C# a Başlangıç Kitabı 3 Đthaf Son 15 yılda programcılık konulu çok sayıda kitap yazmış olmama rağmen kimseye kitap ithaf etmedim. Çünkü sonuçta programcılık kitapları kısa ömürlü metinlerdir ve kısa bir süre içinde eskiyip işlevlerini yitiriyorlar. Bu kez tutumumda değişiklik yapıp bu PDF yi Prof. Dr. Hayri Sever hocama ithaf ediyorum. Tabi bazı arkadaşlar merak edip bu ithafın geri planında ne var diye soracaklardır. Đşte meraklı arkadaşlara cevabım: Hayri Sever hocam aşağıda 2 ayrı tablo halinde verdiğim konu başlıklarının benzer olduğunu rapor ettiği için saygı ifadesi olarak bu PDF yi kendisine ithaf etmek istedim. Hocama nazarınızda teşekkür ediyorum. Bu konu başlıkları 2 farklı C# kitabında temel veritabanı işlemlerini anlatmak için kaleme alınan bölümlerde bulunmaktadır. Sayın hocama Uzaktan Algılama çalışmalarında başarılar diliyorum. Memik Yanık ın C# kitabının temel veritabanı işlemleriyle ilgili bölümündeki konu başlıkları Sonuçları DataSet te Görüntülemek Bilgileri Metin Kutularına Aktarmak Kayıtların Arasında Dolaşmak Tabloya Kayıt Eklemek Kayıt Silmek Başka bir C# kitabındaki temel veritabanı işlemleriyle ilgili bir bölümdeki konu başlıkları Microsoft Access Veritabanına Bağlantı Provider Yaprağı Connection Yaprağı Tablo Bilgilerini DataGrid içerisinde Gösterilmesi TextBox ların DataSet sutunlarına Bağlanması

4 1. BÖLÜM C# ĐLE PROGRAMCILIK Bundan yaklaşık 1.5 yıl önce(aralık 2007) kişisel web sitemde yayınlamak üzere C#, Visual Basic ve Delphi hakkında başlangıç düzeyi bilgi içeren ve ders şeklinde düzenlediğim makaleler hazırladım. Bu makaleleri ilk yazmaya başladığımda her programlama dili için 5 yazı düşünmüştüm. C# ve Visual Basic için hazırladığım derslerin sayısı 4 te kalırken Delphi için yazdığım yazıların sayısı üçte kalmıştı. Dersleri tam gaz kaleme alırken değişken adı benzerliği davası yazma hevesimi kırmıştı. Çünkü programcılık öğrenmek isteyenlere tecrübelerimi aktarırken değişken adı çalma suçlamasıyla kendimi sanık pozisyonunda hakim karşısında bulmuştum yılının son aylarında bir yıl önce yarım bıraktığım dersleri tamamlamak üzere yeniden çalışmaya başladım. Dersleri ilk kaleme aldığım zaman C#, Visual Basic ve Delphi dersleri birbirine paralel gidiyordu. Yani önce bir C# dersi, birkaç gün sonra benzer konuları Visual Basic için kaleme alıyordum. Ancak bu kez öyle yapmadım. Öncelikle C# derslerini bitirmeye çalıştım. C# derslerini tamamladıktan sonra bu kez Visual Basic derslerini yeniden hazırlayıp yayınlamaya karar vermiştim. C# ilgili dersleri kaleme alırken bir yıl önce kaleme aldığım dersleri gözden geçirip eklemeler yaptım. Doğrusu geçen yıl(2007 sonu) programcılık konulu bu dersleri okuyup sonra da az çok programcılıkla uğraşanlara bu derslerin yeni halinin fazla bir katkısı olmayacaktır. Çünkü bu PDF de bir araya getirdiğim bu derslerin hedef okur grubu C# ile programcılığına yeni başlayanlardır. Başka bir deyişle bu PDF de bir araya getirdiğim dersleri 2007 yılında yayınlanan derslerin genişletilmiş baskısı olarak değerlendirebilirsiniz. Aradan biraz zaman geçip C# derslerini tamamlayınca tekrar gözden geçirip e-book olarak C# öğrenmek isteyenlere sunmaya karar verdim. Böylece dersleri okumak kolaylaşmış oldu. Bir makale veya kitap kaleme alınırken önce bir okur grubu hedeflenir ve ona göre bir anlatım düzeyi seçilip konular ulaşılmak istenen hedef okur grubunun "tahmini" beklentilerine göre sıralanır. Bu e-book un hedef okur grubu daha önce C# programlama dilliyle uğraşmamış olanlardır. Ya da C# la ilgili derslerde hocalarını izlemekte zorluk çeken öğrencilerdir, aldıkları C# konulu kitabı okuyup anlamakta zorlananlardır, her hangi bir sitede rastladıkları makalede kullanılan kavramlara uzak olanlardır. Öğretim üyeleri veya programcılık dersini veren hocalar öğrencilere ders anlatırken ne fazla bilgili öğrencileri ne de o programlama diliyle daha önce hiç yakınlığı olmayanları referans alırlar. Dersleri veren hoca sınıfın ortalamasına göre bir anlatım düzeyi tutturmaya çalışır. Tekrar etmek gerekirse bu e-book u oluşturan makaleleri C# veya sözü edilen diğer programlama dilleri hakkında henüz bilgisi olmayanlar için kaleme aldım.

5 Memik Yanık - C# a Başlangıç Kitabı 5 Bu makaleleri kaleme alırken gerçekte klasik anlamda bir amacım yoktu: Programcılık üzerine yazmayı seviyorum. Programcılık üzerine yazdıklarımı önceleri(yani bundan 17 yıl kadar önce) bilgisayar dergilerinde yayınlayarak, kitap şeklinde düzenleyerek sizlere ulaştırdım. Eskisi kadar olmasa bile kitap yazmayı sürdürüyorum. Her ne kadar birçok insan sırf Memik Yanık programcılık konulu kitaplar yazmasın diye seferber olmuş olsa bile yazmayı sürdürüyorum. Yıllardır bilgisayar ve programcılık üzerine yazarken temel ilkem ve ön şartım yazdıklarımın ilk okumada anlaşılmasını sağlamak oldu. Bundan vazgeçmiş değilim. Daha önce herhangi bir şekilde herhangi bir dilde 2 satır kod yazdıysanız ve programcılığa merakınız varsa burada yazılanları ilk okumada mutlaka anlarsınız. Bu nedenlerdir ki bu derslerin ayırt edici özelliği kolay okunmasıdır. Yoksa bu derslerde verilen bilgileri başka sitelerde ve programcılık kitaplarında bulabilirsiniz. Bu derslerin asıl işlevi programcılık öğrenmeye karar vermiş olanların veya programcılık derslerini zevkle izlemek isteyenlerin önünü açmaktır, öğrenme sürelerini kısaltmaktır. Çevrenizde C#, VB, Delphi veya C++ programlama dilini bilenlere gıpta mı ediyorsunuz veya C# ı, Delphi'yi nasıl öğrenirim diye kara kara düşünüyor, okulunuzda gördüğünüz C#, C++, Visual Basic derslerinden nasıl geçerim diye kaygılanıyorsanız ilk olarak bu olumsuz düşünceleri bir tarafa bırakın derim. Yıllarca kitaplarımın arkasında büyük puntolarla Memik YANIK tarafından yazılan kitaplarda ilk okumada anlaşılmayan hiçbir konu yoktur yazdırdım. Bu cümle birçok insanın bana saldırıp hakaretler edip küfürler savurmasına neden olsa bile bu iddiadan vazgeçmiş değilim. Hatta birileri hızını alamayıp Memik Yanık kitaplarında verdiği 3 5 satırlık kısacık kodlarda kullandığı değişkenlere ad seçerken benim kitaptan yararlanıp değişkenlerimin adını çalmıştır diye suçlayıp dava etti. Birçok forumda her gün ismi cismi belli olmayan çok sayıda kişinin Memik Yanık a hakaretler düzmesinin tek nedeni yazdıklarımın ilk okumada mutlaka anlaşılıyor olması değildir elbette. Tepki çekmemin 2. bir nedeni değişik konularda kitaplar yazmamdır. Bir çok kişi Bir kişi nasıl olurda hem Visual Basic, hem Delphi hem de Clipper hakkında kitaplar yazabilir? Olsa olsa başkasına yazdırıyordur veya çeviri yapıyordur şeklinde görüşler ileri sürdüler. Sanki bir gün Clipper kitabını, birkaç gün sonra ise Visual Basic kitabını yazıp yayınlamışım gibi suçlanıyorum. Hal bu ki bütün bu kitapları tam 17 yılda yazdım. Bazı kitaplarımın arkasına "bu kitap telif bir kitaptır yabancı yazarların kitaplarından araklanmadı" diye yazmış olmama rağmen pek inandırıcı olamadım. Gerçekte programcılık kitaplarında kimse bilim yapmıyor, kimse yeni bir şey üretmiyor. Yapılan tek şey; bütün özellikleri ortada olan programlama dilini kendi anlayışıyla kendi cümleleriyle anlatmaktır. Örneğin yüz yıllardır aşk üzerine yazılmış on binlerce roman vardır, aşk konulu binlerce film vardır.

6 6 Memik Yanık - C# a Başlangıç Kitabı Aynı şekilde C# üzerinde yazılmış yüzlerce kitap vardır. Bütün yazarlar aynı konuları anlatıp, aynı metotlardan, aynı sınıflardan söz ediyorlar. O zaman C# konulu kitapların arasındaki fark nedir diye soranlara verilecek cevap şudur: Fark anlatım şeklindedir. Elinize aldığınız kitapta yazarın anlatım şekli, cümleleri, konuları sıralayışı vs size uygunsa o kitap sizin için iyidir. Bu dersleri izleyen okurları bir konuda uyarmak istiyorum: Siz siz olun yazdığınız kodlarda tanımlayıp kullandığınız değişkenlere ad seçerken dikkatli olmalısınız. Olur ya boş bulunup daha önce register(!) edilmiş veya kullanım hakları yerli programcılık kitabı yazarları tarafından kapatılmış i, j, sayi, dosya gibi adlara sahip değişkenleri tanımlarsanız ve bu tespit edilirse(!) başınız belaya girebilir. Bu uyarıya rağmen şu açıklamayı yapmayı gerekli görmekteyim: Bu derslerde kullandığım değişken adlarının mevcut Türkçe programcılık kitaplarındaki değişken adları ile benzerlik göstermesi tesadüf eseridir. C# Programcısı Olmak Đsteyenler Đçin Gerekli Araçlar Daha önce herhangi bir programlama dili ile az çok kod yazdıysanız off şimdi bu C# ı kim öğrenecek, Microsoft firması bu programlama dilini keşke hazırlamasaydı, bir sürü Class, yeni bir dil diyorsanız bu düşüncenizden sizi uzaklaştırmaya yüz binlerce kişiye programcılık öğretmiş Memik YANIK olarak talibim. Daha önce Visual Basic 6 ile az çok program yazdıysanız C# yerine Visual Basic in.net uyumlu sürümünü tercih edebilirsiniz. Ötesi, C# ile Visual Basic in.net sürümünün yeteneklerini karşılaştırdığımızda aralarında önemli bir fark yoktur. Kişisel görüşüme göre C# ı öğrenmek,.net uyumlu Visual Basic i öğrenmekten daha zor değildir. Daha açık bir anlatımla Visual Basic in NET sürümünü tercih etme nedeniniz C# ın daha zor öğrenilen bir dil olacağını sanma düşüncesi olmasın derim. Daha önce C ile az çok uğraştıysanız C# ın söz dizimine çabuk alışacaksınız. Nesneye yönelik programcılık kavramları hakkında bilgi sahibiyseniz, başka bir deyişle C++ üzerinde az çok çalıştıysanız C# ı öğrenmek sizin için daha kolay olacaktır. Benzer şekilde daha önce JAVA hakkında bilgi edinmiş olanların C# ı öğrenmeleri kolay olmaktadır. Birileri bu dersleri 2 cümle ile anlatın derlerse söyleyeceklerim şunlardır: Bu dersler bir programla dili nasıl öğrenilir sorusuna cevap verme uğraşısıdır diyebilirim. Bu derslerin sonuna gelindiğinde C# hakkında temel bilgilere sahip olacak ve bu derslerde sözü edilmeyen.net sınıflarını kolayca öğrenebileceğinizi biliyor olacaksınız, C# programcısı olma yolunda en zor engeli aşmış olacaksınız. Başka bir anlatımla bu dersleri yani PDF yi sonuna kadar okuyan kişilerde programlama dili öğrenme korkusu olmayacaktır. Tabii bu dersleri okuyan arkadaşların 200 sayfalık başlangıç düzeyi C# kitaplarına dönüp bakma ihtiyaçları kalmayacaktır.

7 Memik Yanık - C# a Başlangıç Kitabı 7 Her ne kadar bu başlıkta C# ile program yazmak için gereken araçları bir bir sayıp anlatacak olsam bile mutlaka gerekli olan öğrenme isteğidir. C# ı öğrenmek sizin için önem arz ediyorsa ister bu dersleri izlemiş olun ister izlememiş, bir şekilde C# ı öğrenirsiniz. Zaten kısa sürede C# ı öğrenmeleri zorunluluk olanlar gidip kapsamlı C# kitabı alacaklar veya programcılık eğitimi veren bir kuruma başvuracaklardır. Orada burada Memik YANIK ve kitapları aleyhine konuşan, yazan birilerini görürseniz(ki görmeniz yüksek bir ihtimaldir) onlara hemen inanmayın derim. Öncelikle bu PDF de yazılanları okuyun derim. Bu arada kişisel sitemde bilgisayar kitapları hakkında yazdıklarıma biraz göz atmanızı öneririm( Tabii ki yazdığım kitaplarda hiç hata yoktur hepsi eksiksizdir diyecek değilim. Benim itirazım kitaplarımın incelenmeden, okunmadan karalanmasıdır. Bazı arkadaşlar ise yıllar önce yayınlanan, çoktandır satıştan kalkan kitaplarımı bugünün şartlarına göre değerlendiriyorlar. Örneğin 2007 yılında yayınlanan Delphi 2007 kitabım dururken kalkıp 2000 yılında yayınlanan Delphi kitabım üzerine konuşuyorlar, 2000 yılında yayınlanan programcılık kitabını 2008 yılının ihtiyaçlarına, şartlarına göre değerlendiriyorlar. C# programlama dili ile ilgili bu dersleri izleyebilmek için başlangıçta bilgisayarınızda.net Framework ün kurulu olması yeterlidir. Çünkü.NET Framework ile birlikte C#, Visual Basic for.net ve C++ derleyicileri zaten geliyor. Maddeler halinde yazmak gerekirse C# programlama dili ile program yazmak için size.net Framework Not Defteri gereklidir. Buna göre Not Defteri ile C# programınızı yazıp CS uzantısı ile kaydedersiniz. Sonra DOS penceresine geçip.net Framework ile gelen C# derleyicisi(csc.exe) sayesinde derleme yapıp EXE dosyayı hazırlarsınız. Hiç meraklanmayın bu işlemin ayrıntılarını bir sonraki bölümde anlatacağım. Hemen eklemek gerekirse;.net Framework ü Microsoft ücretsiz dağıtmaktadır ve Windows Vista ile birlikte gelmektedir. Đşletim sistemi olarak Vista kullanıyorsanız microsoft.com dan indirip kurmanız gerekmez. Kullandığınız bilgisayarda Windows XP kuruluysa.net Framework'ü Microsoft un sitesinden indirip kurabilirsiniz. Birkaç yıl önce.net Framework 1.1 vardı. Sonra 2005 yılının başında.net Framework 2.0 hazırlanıp dağıtıldı. Yakın bir zamanda ise.net Framework ün 3.0/3.5 sürümleri piyasaya verildi. Microsoft firması önceleri.net Framework 2.0 a bazı yeni sınıflar ve yardımcı araçlar ekleyip buna.net Framework 3.0 dedi. Sonrasında ise.net Framework 3.5 hazırlandı.

8 8 Memik Yanık - C# a Başlangıç Kitabı Bu e-book boyunca anlatılanları izleyip küçük örnekleri deneyebilmeniz için size.net Framework 2.0 yeterli olacaktır. Tabii kurmuşken en son sürüm olsun diyenler bilgisayarlarına.net Framework ün 3.5 kurabilirler..net Framework 1.0 ve 1.1 ile C# derleyicisinin sürüm nosu 1.0 iken.net Framework 2.0 ile gelenin sürümü nosu 2.0'dır..NET Framework 3.5 ile gelen C# derleyicisinin sürüm nosu 3.0'dır. orada burada C# 2005 veya C# 2008 adında kitaplar görürseniz bilin ki bu kitapların adları yanlıştır. Visual Studio Bu e-book un sizin için verimli olması için daha sonra sözü edilecek Visual Studio 2005 veya 2008 i edinip bilgisayarınıza kurmanız veya C# için hazırlanmış ücretsiz Express Edition ı Microsoft un sitesinden indirip kurmanız gerekir. Express sürümü edinmek kolay olduğu için bu e-book ta Express sürüme ağırlık vereceğim. Tabii bilgisayarlarına Visual Studio yu kurmuş olanları da gözeteceğim. Bu dersleri izlerken Visual Studio nun 2005 veya 2008 sürümü kullanılabilir. Bu paragrafı yukarıda.net Framework ün sürümlerimden söz edilen paragraf ile birlikte okuyanların bir kısmı bu Visual Studio da ne oluyor diye sorabilirler. Hemen açıklayayım. Gerçekte C# veya.net Framework uyumlu herhangi bir programlama dili ile program yazmak için.net Framework ve Not Defteri gibi bir editör programı yeterli olmaktadır.

9 Memik Yanık - C# a Başlangıç Kitabı 9 Ne var ki çok sayıda dosyadan meydana gelebilen C# uygulamalarını Not Defteri gibi kısıtlı özelliklere sahip bir editörle yazmak sonra da DOS penceresinde derlemek imkansız olmasa bile zahmetlidir. Bu nedenle konu.net Framework uyumlu programlama dilleri olduğunda Microsoft ancak bu dillerde program yazma ve derleme işlemini kolaylaştıran Visual Studio yu satarak para kazabilmektedir. Đleri ki konularda derleyici nedir, IDE nedir gibi sorular sizin için bilinmez olmayacaktır. Son 2 paragraftan kafası karışanlar için ek açıklama: Microsoft firma.net Framework adı verilen bir sınıf kitaplığını hazırladı. Bu sınıf kitaplığında program yazarken gerek duyabileceğiniz çok sayıda sınıf bulunmaktadır. Örneğin yazdığınız programda bir düğmeye gerek duyduğunuzda.net Framework ile gelen Button sınıfından, TextBox a gerek duyduğunuzda TextBox sınıfından yararlanabilirsiniz. Bu sınıf kitaplıkları C#, Visual Basic ve C++ gibi.net uyumlu programlama dilleri ile kullanılabildiği için Microsoft firması bu 3 programlama dilinin derleyicilerini.net Framework ile birlikte ücretsiz dağıtmaktadır. Başka bir deyişle kullandığınız bilgisayara.net Framework ü kurmanız halinde elinizde hem Visual Basic hem de C# derleyicisi olmuş oluyor. Express Edition Visual Studio son derece gelişmiş ve program yazmayı kolaylaştırdığı gibi yüksek fiyatla satılan bir program geliştirme aracıdır, yani bir IDE dir. Microsoft firması korsan kullanımı azaltmak, C# ve.net uyumlu diğer programlama dillerini henüz öğrenenleri düşünerek Express Edition adı verilen Visual Studio ya göre kısıtlı özelliklere sahip IDE ler hazırlayıp dağıtmaya başladı.

10 10 Memik Yanık - C# a Başlangıç Kitabı Visual Studio ile C#, Visual Basic, C++ ve ASP.NET uygulamaları geliştirmek mümkün iken Express Edition lar "dile" özeldir. Yani.NET uyumlu hangi programlama dili kullanılacaksa o dil için hazırlanmış Express Edition adı verilen IDE yi yani program geliştirme aracını Microsoft un sitesinden indirip kurmak gerekiyor. Hemen eklemek gerekir ki C# için hazırlanmış olan Express Edition bir programlama dili olmayıp C# uygulamalarını kolayca hazırlayabilmeniz için Microsoft tarafından hazırlanıp ücretsiz olarak dağıtılın bir IDE dir, yani bir yardımcı programdır. Karışıklık olmasın diye bir konuyu tekrarlayalım:c# derleyicisi.net Framework ile birlikte dağıtılmaktadır..net Framework 1.0 ve 1.1 ile birlikte C# derleyicisinin 1.0 sürümü verilirken.net Framework 2.0 ile birlikte C# derleyicisinin 2.0 sürümü gelmektedir. Geçen yıl kullanıma sunulan.net Framework 3.5 ile birlikte ise C# derleyicisinin 3.0 sürümü gelmektedir. C# derleyicisinde 1.0 dan 2.0 sürümüne gelindiğinde önemli gelişmeler olmuştu. C# derleyicisinin 3.0 sürümünde çok sayıda yenilik olmasına rağmen hepsi dile yapılan birer ektir. Başka bir deyişle C# 2.0 için yazılan kodlar C# 3.0 ile sorunsuzca derlenebilmektedir. Kısaca anlatmak gerekirse Visual C# için hazırlanmış Express Edition, Visual Studio yu edinemeyip ancak programlarını Not Defteri ile hazırlamak istemeyenlere uygundur. Bana sorarsanız C# ı öğrenirken Express Edition

11 Memik Yanık - C# a Başlangıç Kitabı 11 size yeterli olacaktır. Visual Studio yu edinme imkanınız varsa Express Edition a kayıtsız kalabilirsiniz. Bu derslerde C# 3.0 ile gelen yeniliklerden söz edilmeyeceği için Express Edition ın 2005 sürümü kullanılabilir. Tabi en son sürüm olsun diyenler 2008 yılında kullanıma sunulan sürümü indirip bilgisayarlarına kurabilirler. Daha sonra C# için hazırlanan Express Edition ın nasıl kurulduğu anlatılacaktır.

12 2. BÖLÜM C# PROGRAMI YAZMAYA BAŞLIYORUZ Bir önceki bölümde C# programlama diline başlama konusunda biraz sohbet etmiştik. Bu bölümde ise kod yazmaya başlayacağız. C# konulu hangi kitabı alırsanız alın, C# konulu hangi kursa gidiyorsanız gidin, C# programlama diliyle ilgili dersleri hangi fakültede alıyorsanız alın C# la çalışmaya bu dersleri okumakla başlamanızı öneriyoruz. Bu sayede C# a ayırmanız gereken zaman büyük oranda azalacaktır. Yıllardır konu programcılık üzerine yazmak olduğunda asıl olanın anlatma şekli olduğunu savunuyorum. Yoksa söz konusu programlama diliyle ilgili olarak hemen her şey kısa sürede söylenmekte, hemen her sorunun çözümü bir şekilde anlatılmaktadır. Yoksa programcılık üzerine yazan birisinin okurları ile paylaştığı bir yenilikten söz etmesi uzak bir ihtimaldir. Bu durumda programcılık üzerine yazanlar ancak anlatma biçimleri ile övünebilirler, ancak kurdukları cümlelerin düzgünlüğü ile fark yaratabilirler. Yoksa bu bölümde anlattığım her şeyi C# la az çok uğraşmış herkes biliyordur. Yani bu makalede yeni bir şey söylemem ihtimal dışıdır. Bu nedenle anlı şanlı bir Üniversitemizin Prof unvanlı öğretim üyesinin birisi bu metnin çalıntı olduğunu orada burada yazarsa gülüp geçin..net Framework ü Kurmak Herhangi bir programlama dili ile çalışılıp uygulama geliştirilmek istendiğinde ilk yapılması gereken derleyici edinmektedir. Ancak konu.net Framework uyumlu programlama dilleri olduğunda derleyici aramak zorunda kalmıyorsunuz. Çünkü C#, Visual Basic ve C++ derleyicileri.net Framework ile birlikte ücretsiz olarak dağıtılmaktadır. Buna göre C# programları yazabilmek için bilgisayarımıza.net Framework ün kurulu olması yeterlidir. Kullandığınız bilgisayarda Windows Vista kurulu ise ayrıca.net Framework kurmanız gerekmiyor. Çünkü.NET Framework Vista ile birlikte geliyor. Kullandığınız bilgisayara Windows XP kurulu ise microsoft.com dan istediğiniz.net Framework ü indirip kurmanız gerekir. Şu günlerde kullanıma sunulan.net Framework ün en son sürümünün numarası 3.5. Daha önce işaret edildiği gibi bu derslerde örnek olması için verilen küçük programları yazıp deneyebilmeniz için.net Framework ün 2.0 sürümü yeterlidir. Bilgisayarınıza.NET Framework ün yüklü olup olmadığını veya yüklü ise hangi sürümün yüklü olduğunu öğrenmek için Windows un Program Ekle veya Kaldır penceresine bakabilirsiniz. Kullandığınız bilgisayara.net Framework kurulu ise hemen C# programları yazabilirsiniz. Not Defteri ile C# kodu yazıp CS uzantısı ile herhangi bir klasöre kaydedip sonra da.net Framework ile gelen C# derleyicisi(yani

13 Memik Yanık - C# a Başlangıç Kitabı 13 csc.exe dosyası) sayesinde derleme yapıp EXE dosya hazırlayabilirsiniz. Bu derste öncelikle C# programlarını Not Defteri ile yazıp derleyeceğiz. Devamında C# için hazırlanmış Express Edition dan yararlanacağız. Şimdi microsoft.com a uğrayıp.net Framework 3.5 ı indireceğim. Bu amaçla microsoft.com da arama yapıp indirebileceğim linki buldum. Bulduğum linki tıklayınca ekrana aşağıda verdiğim diyalog kutusu geldi. Yaklaşık 3 Mb lık bu dosyayı indirip bilgisayarıma kaydettikten sonra çalıştırdım..net Framework 3.5 gerçekte 72 MB olduğu için indirdiğiniz dosyayı çalıştırıp kurmaya başladığınızda geri kalanı Microsoft un sitesinden indiriliyor. Başka bir deyişle nete bağlı değilken bu 3 Mb lık dosya ile kurma işlemi yapılamıyor. Bu metni kaleme aldığım sırada.net Framework 3.5 için SP1 çıkmıştı.microsoft.com da SP1 i indirip kurmanız önerilir. Program Yazmaya Başlıyoruz. Konu.NET uyumlu programlama dilleri ve özellikle C# olduğunda ilk karşılaşmamız gereken kavram Class kavramıdır. C# programları Class şeklinde düzenlendiği için en başından Class kavramından söz etmek gerekmektedir. Programları Class lar halinde düzenlemenin sayısız yararları vardır. Ancak bunları burada anlatmayacağım. Class lar hakkında bilgi sahibi olmadan Visual Basic 6 ve Delphi gibi programlama dilleri ile program geliştirmek mümkün iken C++, C# ve Java gibi diller Class lar hakkında bilgi sahibi olmanızı zorunlu kılmaktadır. Kaygılanmanıza gerek yok; bu dersi sonuna kadar okuduğunuzda bir de bakarsınız ki Class'lar hakkında temel bilgilere sahip olmuşsunuz. Yoksa diğer kitaplarda yapıldığı gibi sizlere Class lar hakkında teorik bilgi vermeyi düşünmüyorum. Quick Basic, Pascal ve C gibi klasik programlama dillerinde kod dosyaları içinde fonksiyonlar ve procedure ler bulunuyordu. Hatta C de fonksiyon

14 14 Memik Yanık - C# a Başlangıç Kitabı procedure ayrımı da yoktur. Başka bir deyişle programcılar yapmak istedikleri işlemlere uygun fonksiyonlar yazıp gerek duydukça bunları çağırırlardı. Zamanla programlar büyüyüp karmaşıklaştıkça paketlenmesi ihtiyacı doğdu. Fonksiyon ve metotların Class lar halinde paketlenmesi ile birlikte Class içinde bulunan fonksiyonların kullanılması, organize edilmesi ihtiyacı doğdu. Günümüzde yaygın olarak kullanılan programlama dillerinde Class lar metotlardan başka Interface leri, Olayları, Özellikleri, Delegate leri ve Yapıcı metotları içerebilmektedir. Lütfen olay nedir özellik nedir ki diye sormayın. Zamanı gelince bu konular hakkında bilgi verilecektir. Yerli yabancı ayrımı yapmadan bugüne kadar hangi kaynağa baktıysam konu nesneye yönelik programcılık olduğunda ilk birkaç sayfada biyolojiden, memelilerden, ütülerden arabalardan vs. söz edilmektedir. Her yazar nesneye yönelik programcılığın 3 temel kavramını kendince anlatmaktadır. Uzatmadan belirtmek isterim ki anlayış öğrenmeyi zorlaştırmaktadır. Đstediğiniz ayrıntıda polimorfizm den söz edin, istediğiniz kadar biyolojiden memelilerden örnek verin bu kavramların kod karşılığı görülmeden verilen bilgiler havada kalıyor. Bu nedenledir ki bu bölümde nesneye yönelik programcılığın temel kavramlarından söz etmeden bu konuyu anlatmak istiyorum. Esasında burada bilim yapmıyoruz, olsa olsa sizlere C# programlama dili ile nasıl program yazabileceğinizi anlatmak istiyoruz. Amacımız en basit şekilde programcılık tecrübesi olmayanları programcılığa alıştırmaktır, onları C# programlama dillini öğrenebileceklerine inandırmaktır. Aşağıda en basit veya en kısıtlı, en az satıra sahip bir C# programı bulunmaktadır. Bu kodu Not Defteri penceresine yazıp CS uzantısı ile kaydedip.net Framework ile gelen C# derleyicisi ile derleyip EXE yapabilirsiniz. Bu işlemin nasıl yapıldığı ileriki sayfalarda anlatılacaktır. Ey Üniversite hocaları ey programcılık üzerine yazanlar başka bir kaynakta "Deneme" adında bir Class görürseniz bilin ki bu isim benzerliği tesadüfüdür. Yoksa bu Class'a deneme yerine "tecrube" ya da "deneyimsiz" gibi bir ad vermek marifete tabi değildir.

15 Memik Yanık - C# a Başlangıç Kitabı 15 Buna göre C# kodu yazmak istiyorsanız önce mutlaka bir Class bloğu hazırlamanız gerekmektedir. C# programlarının başlangıç noktası Main() metodu olduğundan Main() metoduna yer vermek zorundasınız. Bu C# kodu CS uzantılı bir dosyaya yazılıp kaydedilip derlenip hazırlanan EXE dosya çalıştırılırsa herhangi bir hata ile karşılaşılmaz. Ancak bu program bu hali ile herhangi bir işlem yapmaz. En az satıra sahip bu C# programındaki Main() metodunun hem static hem de void olduğunu işaret ettim. C# programlarının başlangıç noktası olan Main() metodu(c programlama dilinde Main den fonksiyon diye söz edilir) statik olmak zorundadır ama void olması zorunlu değildir. Metot geriye bir değer göndermeyecekse metot adından önce void yazılır. Daha sonra metotların geriye nasıl değer gönderdikleri konusunda bilgi verilecektir. Bu kısacak programda bile Class tan söz ettik, metottan söz ettik. Size önerim başlangıçta verdiğim kısacak kodlarda kullanıp ancak sözünü etmediğim deyimlere veya metotlara kayıtsız kalmanızdır. Örneğin bu kısacak örnekte bile sözünü etmediğim, dikkatinizden kaçırmak istediğim bir şeyler var. Dikkat ederseniz Main() metodunun adından sonra parantezlerin arasına string[] args yazdım. Bu parantezin içine yazdıklarım gerçekte dizi değişken tanımlamaktan başka bir şey değildir Ancak şu anda bundan söz etmeyeceğim. Bu nedenle bu derslerden azami verimi almak istiyorsanız anlatılmayanlara değil anlatılanlara odaklanmalısınız. Main metodu içinde tanımlanan dizi değişkene "args" adını vermek C# programcılarının bir alışkanlığıdır. Tabi benzer alışkanlık sayısal bilgileri saklamak amacıyla tanımlanan değişkenlere ad seçerken de vardır ve "i" ve "j" sık kullanılan değişken adlarıdır. Her ne kadar i ve j nin değişken adı olarak kullanılması bütün dünyanın bir alışkanlığı olsa bile Türkiye de bazı öğretim üyelerine göre i ve j adında değişkenler tanımlamak suçtur. Şimdi yukarıda verdiğim C# programının başlangıç noktası olan Main() metodu içinde bir değişkene yer vereceğim. Bu değişkeni Main() metodu içinde tanımladım. Değişkeni Main() metodu tarafından sınırlanan kod bloğu yerine Class bloğu içinde tanımlayabilirdim. class Deneme static void Main(string[] args) int yil; Gördüğünüz gibi C# programlarında değişken tanımlanırken önce değişkenin tipi sonra adı yazılmaktadır. Buradaki int bu değişkenin integer yani tamsayı tipindeki bilgileri saklayabileceğini işaret etmektedir.

16 16 Memik Yanık - C# a Başlangıç Kitabı Programcılıkta değişken tanımlamayı günlük hayatta telefon edip bir otelde yer ayırmaya benzetmek mümkündür. Bu değişkeni tanımlamakla derleyiciye demiş oluyorum ki, programın ileriki safhalarında integer bilgileri bellekte tutma gereğini duyabilirim. Bu nedenle bana bellekte bu amaçla kullanacağım bir yer ayırt. Bu kısacak kodu iki cümle ile yorumlamak gerekirse şunlar söylenebilir: Bu programdaki Deneme adlı Class ın Main() adında bir metodu bulunmaktadır. Main() metodu içinde yaşayabilecek yil adında ve Integer tipindeki bilgilerin aktarılabileceği bir değişken tanımlanmıştır. Bu değişkeni Main() metodu içinde tanımladığım için yalnızca Main() metodunun sınırları içinde yaşar. Fark etmiş olabileceğiniz gibi C# programlarında Class ve metot başlatılan satırlar hariç her satırın sonuna ; konulmaktadır. Bu kodu NET uyumlu Visual Basic için yazsaydım biraz farklı olurdu. Ancak temel mantıkta pek farklılık yoktur..net uyumlu Visual Basic'te de zorunlu olmamakla birlikte uygulamalar Class halinde düzenlenmekte ve Class ların içinde metotlar, alanlar(yani değişkenler), özellikler, olaylar, Interface ler olabilmektedir. Lütfen olay nedir, özellik nedir, Interface nedir gibi sorularla şimdilik meşgul olmayın. Şimdiye kadar incelediğim bütün kaynaklarda, bütün kitaplarda değişkenler adında bir bölüm mutlaka vardı. Kitaplarda değişkenler adlı bölümün olması doğal olmasına doğal da değişkenler sanki C, Basic ve Pascal programlama dillerindeki değişken kullanımı gözetilerek anlatılmaktadır. Bu derslerde değişkenler Class bağlamında kısaca anlatılacaktır. Yukarıda belirtildiği gibi Class lar metotları barındırabilmektedir. Ayrıca C# programlarında Main() metodunun bulunması zorunludur. Yukarıda verdiğim en kısıtlı C# programı içinde hazırladığım Class ta değişiklik yapıp 2. bir metoda yer verdim. Herhangi bir satır içermeyen bu metot bu hali ile herhangi bir işlem yapmaz. Bu metodu da hem static hem de void olarak işaret ettiğimi fark etmiş olmalısınız. Yarın bir gün metot adı benzerliği suçlanmak istemeyenler bu metoda Türkçe yerine gavurca bir ad verebilirler. Mesaj ın Türkçe bir kelime olmadığı gerçeğine rağmen class Deneme static void Main(string[] args) int yil; static void Mesaj()

17 Memik Yanık - C# a Başlangıç Kitabı 17 Daha önce C#, C++, Delphi gibi bir programlama dili ile program geliştirmiş iseniz yani az çok kod yazdıysanız bu derste anlatılanlar size basit gelecektir. Programcılıkta tecrübeli arkadaşlara bir önerim var; sizler bu yazıda ne anlatıldığı ile değil, nasıl anlatıldığı ile ilgilenebilirsiniz. Belki bir üniversitenin öğretim görevlisisiniz, belki de bir Microsoft eğitim merkezinde eğitmensiniz. Bu yazıdaki amacım C# gibi bir programlama dilinin nasıl kolay öğrenilebileceği konusunda deneme yapmaktır. Şimdi yukarıda verdiğim basit C# kod dosyası içinde Mesaj() adını verdiğim metodu Main() metodunun içinden işleteceğim. Hazırladığım metot aynı sınıfın içinde olduğu için herhangi bir hazırlık yapmadan direk adıyla çağırıp işletmek mümkündür. class Deneme static void Main(string[] args) int yil; Mesaj(); static void Mesaj() Bu hali ile bu C# programı veya CS uzantılı kod dosyası DOS penceresinde derlenip EXE hazırlanıp çalıştırılırsa Main() metodu otomatik olarak işletilir. Çünkü yukarıda söylendiği gibi C# programları Main() metodundan itibaren çalışmaya başlarlar. Bu programı aşağıdaki gibi düzenlemiş olsaydım değişen bir şey olmazdı. Çünkü C# derleyicisi Main() metodunu bulup programın başlangıç noktası yapar. Bu kısa örnekte yil adını verdiğim değişkeni hiç kullanmadığım için C# derleyicisi derleme sırasında uyarı mesajı verir. class Deneme static void Mesaj() static void Main(string[] args) int yil; Mesaj();

18 18 Memik Yanık - C# a Başlangıç Kitabı Şimdi bu Mesaj() adını verdiğim metoda müdahale edip işletildiği zaman ekrana bilgi yazılmasını sağlayacağım. Konsolda yani DOS penceresinde çalışan C# projelerinde ekrana bilgi yazma işlemleri.net Framework ile gelen Console sınıfında tanımlı olan Write() veya WriteLine() metotları ile yapılmaktadır. Tam bu noktada elime fırsat geçmişken biraz kendimi savunmak istiyorum. Yıllardır Memik YANIK aleyhine konuşanların en genel geçer suçlaması şuydu: Memik YANIK kitaplarını ekran görüntüleri ile doldurup şişiriyor. Gördüğünüz gibi yukarıda Not Defteri ile hazırladığım toplam 12 satırdan meydana gelen kodun kendisini vermek yerine kodu yazmış olduğum Not Defteri penceresinin ekran görüntüsünü verdim. Bu metni kitap için yazmış olsaydım ekran görüntüsünü belli bir oranda küçültüp kitapta daha az yer kalmasını sağlardım. Aşağıda ise bu ekran görüntüsünü verdiğim Not Defteri penceresine yazmış olduğum kodun kendisi var. Sizce kitap metni içinde hangisi çok yer kaplar, ekran görüntüsü mü yoksa kodun kendisi mi? Seçilen puntoya bağlı olarak değişse bile aralarında önemsenecek bir farkın olmadığını söyleyebilirim. Ne ki ekran görüntüsü halinde verilen kısa kodları incelemek bazen daha kolaydır. Neden mi bazen? Çünkü kitap metni içinde kullanılmak istenen kod satır kadarsa kodun kendisi yerine kodu yazıldığı ekran görüntüsü verilebilir. Ancak kod uzunsa ekran görüntüsü yerine kodun kendisini vermek gerekir. class Deneme static void Main(string[] args) int yil; Mesaj();

19 Memik Yanık - C# a Başlangıç Kitabı 19 static void Mesaj() System.Console.WriteLine("Fenerbahçe"); Bu şekilde düzenlenen C# uygulaması DOS penceresinde derlenip çalıştırıldığında ekrana Fenerbahçe yazdırıldıktan sonra programın çalışması sona erer. Çünkü C# ile geliştirilmiş programların çalışması Main() metodunun sonuna gelindiğinde biter. Mesaj() metoduna yazdığım satır hakkında biraz konuşmak gerekirse; System.Console.WriteLine("Fenerbahçe"); satırındaki System bir namespace tir. Şimdi diyeceksiniz Namespace nedir? Cevabım hazır: Lütfen merakınızı sonraya saklayın; halk dili ile söylemek gerekirse üzümü ye bağını sorma. Kısaca anlatmak gerekirse Class lar Namespace lerin içine yerleştirilmektedir. System adlı Namespace.NET Framework ile gelen en önemli Namespace tir ve çok sayıda Class ı barındırmaktadır. DOS penceresine veya konsola bilgi yazmak üzere hazırladığım satırdaki Console bir Class tır. Çok sayıda metoda sahip olan bu Class ın sayesinde konsol yani DOS penceresi ile ilgili istenen işlemler yapılabilmektedir. Bu satırdaki WriteLine() ise Console sınıfının bir metodudur. Bu konuyu bir okulda, bir dershanede veya seminerde anlatıyor olsaydım C# hakkında biraz bilgisi olanlar Memik bey WriteLine() static bir metot değil mi? diye sorabilirlerdi. Soruyu soranlara cevabım evet, WriteLine() metodu statik bir metottur. Tabii dersi veya semineri izleyenlerin bazıları statik olanla olmayan metot arasında ne fark vardır diye soru soracaklardı, bazıları ise keşke bu konuşulanları anlasaydım diye iç geçireceklerdi. Fırsat bu fırsat deyip hemen statik olan ve olmayan metotlar hakkında uzun açıklamalar yapmayacağım. Arkadaşlar lütfen biraz sabır. Programları Derlemek Bazılarınız bu kısacak örneği bile hemen denemek, bu CS uzantılı dosyayı derleyip EXE dosya hazırlamak istiyor olabilir. Bu isteğe uyup CS uzantılı kod dosyasını derleyip EXE yapma üzerinde duracağım. Not Defteri ile hazırlayacağınız kod dosyalarını yerleştirmek üzere ayrı bir klasör hazırlamanızı öneririm. Bu klasör C: sürücüsünün kök klasöründe olursa ulaşılması kolay olur.

20 20 Memik Yanık - C# a Başlangıç Kitabı C# ın kurallarına uyarak yazdığınız programları derleyip EXE dosya hazırlayacak program dosyası(csc.exe) Windows un kurulu olduğu klasörün altında Microsoft.NET\Framework klasöründe yer almaktadır..net Framework ün başka sürümünden yararlanıyorsanız bu klasörün adı farklı olabilir. Hazırlayacağınız CS uzantılı dosyaları bu CSC.EXE dosyasının bulunduğu klasöre kaydetmeli veya Denetim Masasındaki Sistem seçeneği ile ekrana getirilen Sistem Özellikleri diyalog kutusunda Gelişmiş sekmesindeki Sistem Değişkenleri seçeneğinden yararlanmalısınız. Path seçeneğinin

21 Memik Yanık - C# a Başlangıç Kitabı 21 içeriğine aşağıda verdiğim satırlardan birisini ekleyip bilgisayarı yeniden başlatırsanız istediğiniz yerden CS uzantılı kod dosyalarını derleyebilirsiniz. C:\WINDOWS\Microsoft.NET\Framework\v3.5; "C:\WINDOWS\Microsoft.NET\Framework\v ;" Kullandığınız bilgisayara Visual Studio 2008'i kurulu ise Başlat menüsünden Visual Studio 2008 Command Prompt komutu verilerek açılan DOS penceresinde yukarıda anlatılan şekilde Path ayarlaması yapılmasa bile C# programlarını istediğiniz yerde derleyebilirsiniz. C# derleyicisinin kullanım şekli ve parametreleri hakkında bilgi edinmek istiyorsanız DOS penceresinde CSC /? yazıp enter tuşuna basabilirsiniz. Şimdi sıra geldi bu programı derlemeye. Bu amaçla bir DOS penceresi açıp komut satırına CSC ILK.CS yazıp Enter tuşuna basınca C# programı derlenmeye başlandı. Yazdığım programda herhangi bir hata olmadığı için EXE dosya hazırlandı. Yazdığım C# programında Main() metodu içinde yil adında ve int tipinde bir değişken tanımlamış olmama rağmen bu değişkeni hiç kullanmadığım için derleyici uyarıda bulundu. Bu uyarı ILK.CS dosyasından yola çıkılıp ILK.EXE dosyasının hazırlanmasına engel değildir. Derleyici uyarı yerine hata mesajı vermek zorunda kalsaydı EXE dosya hazırlanmazdı.

22 22 Memik Yanık - C# a Başlangıç Kitabı Tekrarlamak gerekirse yukarıdaki gibi yapılan derleme sonucu CS uzantılı C# programı ile aynı ada sahip bir EXE dosyası hazırlanır. Aşağıda verdiğim ekran görüntüsünü bu EXE dosyayı çalıştırdıktan sonra aldım. Derleme sonucu hazırlanan EXE dosya ancak.net Framework kurulu bilgisayarda çalışır. Bu EXE dosyayı alıp.net Framework 2.0 kurulu olmayan(çünkü yukarıda derleme işlemini.net Framework 2.0 ile gelen C# derleyicisi ile yaptım) başka bir bilgisayara götürdüğünüzde çalışmaz. Aşağıda verdiğim ekran görüntüsünü hazırladığım EXE dosyayı çalıştırdıktan sonra aldım. Hazırlayıp derlediğim C# programı ekrana bu bilgiyi yazdıktan sonra yani Main() metodunun sonuna gelindiğinde çalışması otomatik olarak sona erer. Şimdi bu örmekte öyle bir ayarlama yapalım ki programın veya EXE dosyanın çalışması Enter tuşuna basıncaya kadar devam etsin. Programın çalışmasının Enter tuşuna basıncaya kadar devam etmesini sağlamak üzere Deneme adını verdiğim Class'ın Main() metoduna bazı eklemeler yaptım. class Deneme static void Main(string[] args) int yil; Mesaj(); System.Console.WriteLine(); System.Console.Write("Çıkmak için Enter Tuşuna Basın"); System.Console.Read(); static void Mesaj() System.Console.WriteLine("Şampiyon Fenerbahçe"); Gördüğünüz gibi Console sınıfının WriteLine() metodunu Mesaj() adını verdiğim metodun içinden başka bir deyişle Main() metodunun içinde kullandım. Bu örnekte Main() metodu içinde önce Mesaj() adını verdiğim metot çağrıldığı için ekrana önce Şampiyon Fenerbahçe yazılır. Mesaj() metodunun çağrıldığı satırdan sonra yine WriteLine() metodu kullanılmaktadır. Bu kez WriteLine() metoduna ekrana yazılmak üzere bilgi

23 Memik Yanık - C# a Başlangıç Kitabı 23 parametre olarak verilmediği için ekranın o satırı boş kalır. Bir sonraki satırda ise WriteLine() yerine Write() metodunu kullandım. WriteLine() metodu kendisine parametre olarak verilen bilgiyi ekrana yani DOS penceresine yazdıktan sonra imleci bir sonraki satırın başına alır. Write() metodu ise WriteLine() metodundan farklı olarak imleci bir sonraki satırın başına almaz. Burada programın çalışmasının kendiliğinden sona ermesini engelleyen metot ise Read(). Bu şekilde düzenlenen C# programı derlenip çalıştırıldığında aşağıdaki gibi bir sonuç alınır. Console sınıfının Read() metodu gerçekte kullanıcının gireceği bilgileri programa veya bir değişkene aktarılırken işlevsel olmaktadır. Bu örnekte kullanıcının bilgi girmesini istemediğim için Console sınıfının Read() metodundan önce herhangi bir değişken adı yazmadım. Diğer yandan yukarıda verdiğim örnekte asıl anlatmak istediğim şuydu: C# programları Class lar şeklinde hazırlanmakta ve Class larda işlem yapan kod blokları metot şeklinde düzenlenmektedir. Bu düşünce ile hazırladığım kısacık örnekte Main() metodundan başka Mesaj() adında bir metot hazırlayıp Main() metodu dahilinde işlettim. Şimdi bu örnekte değişiklik yapıp Mesaj() adını verdiğim metodu silip çalışma anında yil adını verdiğim değişkene bilgi aktarmaya çalışacağım. class Deneme static void Main(string[] args) int yil; System.Console.Write("Hangi Yıldayız : "); yil = System.Console.Read(); Bu şekilde değiştirdiğim C# programında önce Console sınıfının Write() metodu ile kullanıcıya mesaj verdikten sonra bir sonraki satırda Read() metodu sayesinde kullanıcıdan istenen bilgiyi yil adını verdiğim değişkene

24 24 Memik Yanık - C# a Başlangıç Kitabı aktardım. Aşağıda verdiğim ekran görüntüsünü bu kısa programı derleyip çalıştırdıktan sonra aldım. Ekrana mesaj yazarken Write() yerine WriteLine() metodunu kullansaydım imleç bilgi girişi için bir sonraki satırda beklerdi. Şimdi bu C# programına ekleme yapıp kullanıcıdan istenip yıl adını verdiğim değişkenine aktarılan bilgiyi WriteLine() metodu ile tekrar ekrana yazacağım. class Deneme static void Main(string[] args) int yil; System.Console.Write("Hangi Yıldayız : "); yil = System.Console.Read(); System.Console.WriteLine(); System.Console.Write("Girdiğiniz Yıl :"); System.Console.WriteLine(yil); Bu şekilde düzenlenen örnek derlenirken hata vermediği gibi çalıştırıldığında da hata vermez ama girilen yıl bilgisi ile sonradan WriteLine() metodu ile ekrana yazılan yıl bilgisi birbirinden farklı olur. Aşağıda verdiğim ekran görüntüsünü bu C# programını derleyip çalıştırdıktan sonra aldım.

25 Memik Yanık - C# a Başlangıç Kitabı 25 Yukarıda verilen koda dikkat ederseniz konsoldan bilgi okuma işlemi Read() metodu ile yapılmaktadır. Read() metodu konsoldan okuma yaparken girilen bilginin ilk karakterinin ASCII kodunu geriye göndermektedir. Bu program derlenip çalıştırılıp Hangi Yıldayız : sorusuna A ile cevap verilirse ekrana 65 yazılır. Çünkü A hafinin ASCII kodu 65 dir. Console sınıfının ReadLine() metodu ise farklı bir şekilde çalışmaktadır ve konsoldan yani DOS penceresinden okuduğu bilginin String tipte olduğunu varsaymaktadır. Bu nedenle yukarıda verdiğimde örnekte değişiklik yapıp okuma işlemini Read() yerine ReadLine() metodu ile yapmaya çalıştım. class Deneme static void Main(string[] args) int yil; System.Console.Write("Hangi Yıldayız : "); yil = System.Console.ReadLine(); System.Console.Write("Girdiğiniz Yıl :"); System.Console.WriteLine(yil); Bu şekilde değiştirdiğimiz C# programını derlemek istersek derleyici hata rapor eder. Çünkü Console sınıfının ReadLine() metodu tarafından okunup geriye gönderilen bilgi String tipte olmasına rağmen burada int tipindeki değişkene aktarmaya çalışıyorum. Bu hatanın önüne geçmek için string tipte bir değişken tanımlayıp kullandım. class Deneme static void Main() string str; System.Console.Write("Hangi Yıldayız : "); str = System.Console.ReadLine(); System.Console.Write("Girdiğiniz Yıl :"); System.Console.WriteLine(str);

26 26 Memik Yanık - C# a Başlangıç Kitabı Bu hali ile programımız istediğimiz sonucu verir. Bu örnekte konsoldan girilen yıl bilgisi matematiksel işlemlerde kullanılmadığı için rakamlardan meydana gelse bile string yani karaktersel bilgi olarak değerlendirmenin bir sakıncası olmaz. 2. Bölümün Özeti Not Defteri ile yazdığımız ilk programda Class bloğuna yer verdik. Bildiğiniz gibi C# programlarında blok başı ile ve blok sonu ise ile işaret edilmektedir. C# programları çalışmaya Main() metodundan itibaren başladıkları için Class ın sınırları içinde Main() metoduna yer verdim. Main() metodu içinde Console sınıfının WriteLine() metodu ile konsola yani DOS penceresine bilgi yazmayı denedik. Ayrıca.NET Framework ile gelen C# derleyicisi ile yani CSC.EXE dosyası ile CS uzantısı ile kaydettiğimiz C# programlarını derleyip EXE dosya hazırladık. Yukarıda yazılanları okurken kafanızda bazı soruların belirdiğini tahmin etmek zor değildir. Programcılık biraz da bisiklet sürmeyi öğrenmek gibidir: Önceler sık sık bisikletten düşersiniz, insanların 2 teker üzerinde nasıl düşmeden gittiklerine hayret edersiniz. Sonra 50 metre düşmeden gittiğinizde birden bisiklet sürmesini öğrendiğinizi fark edersiniz. Birçok kişi programcılığa nereden başlayacağı konusunda tereddüde düşüyor. Bu soruların cevaplarını bu dersler boyunca birlikte araştıracağız.

27 3. BÖLÜM BAZI DEĞĐŞKEN TĐPLERĐ ve NAMESPACE'ler Bu yazıları neden mi kaleme almıştım? Programcılık kitaplarının ilk sayfalarında konuları sıfırdan ele alıp adım adım anlatınca bazı arkadaşlar kitabın anlatım düzeyine itiraz etmeye başladılar. Ben de çözüm olarak henüz yolun başında olanları gözeterek birkaç makale yazdım. Burada yer sonunu olmadığı için en küçük ayrıntıdan bile söz etmeye çalıştım. Şimdi izninizle konunun biraz dışına çıkacağım:tıp doktorları kendi aralarında tıp konuştuklarında tıp kavramlarını sıkça kullanırlar ve kolayca anlaşırlar. Ne var ki doktorun birisi hastasıyla konuştuğunda tıp kavramlarını kullanmaz ve halk dili ile hastasıyla diyalog kurmaya çalışır. Doktorumuz hastalarıyla tıp kavramlarını kullanmadan iyi diyalog kurabiliyorsa başarılı doktor olur. Yıllardır camiadan bir çok kişi Memik Yanık'ı hep giriş düzeyi kitaplar yazmakla suçladılar. Habu ki en zoru giriş düzeyi kitaplar yazmaktır. Bakalım şimdi de Memik Yanık'ı giriş düzeyi makaleler yazıyor diye suçlayacaklar mıdır? Ötesi anlı şanlı üniversitelerimizin Profesör unvanına sahip hocaları bu metinde verdiğim kısacak kodlarda tanımladığım değişkenlerin adını çalma suçunu işlediğimi tekrar rapor edecekler midir? Kaldığımız Yerden Devam Edelim Bir önceki bölümde Not Defteri ile kısa bir C# programı hazırlayıp ilk.cs adıyla kaydetmiştik. Devamında bu CS uzantılı C# programını konsolda derleyip EXE dosya hazırlamıştık. Hatta örneğimizin son hali beklediğimiz sonucu vermemişti. Bu bölümde ilk olarak bir önceki derste yaptığımız örneği düzelteceğiz. Bir önceki bölümde hazırladığımız örneğin son şeklini aşağıda verdim. class Deneme static void Main(string[] args) int yil; System.Console.Write("Hangi Yıldayız : "); yil = System.Console.Read(); System.Console.WriteLine(); System.Console.Write("Girdiğiniz Yıl :"); System.Console.WriteLine(yil); Not: Bu kısacık kodda "Yil" adında ve int tipinde bir değişken tanımladım. Bildiğiniz gibi sene bilgisini aktarmak üzere değişken adı seçimini yapan

28 28 Memik Yanık - C# a Başlangıç Kitabı programcıların aklına yil'ın gelmesi yüksek bir ihtimaldir. Asıl demek istediğim şudur:değişken adı olarak yil ı kendi namı hesabına kaydetmiş yani register etmiş birisi resmi belgeleri ibraz edip(!) beni uyarırsa burada "yil" adını verdiğim değişkene "yillar_yillar" veya "Kaybolan_yillar" gibi bir ad verebilirim(!). Bu koda dikkat ederseniz konsoldan bilgi okuma işlemi Read() metodu ile yapılmaktadır. Read() metodu konsoldan okuma yaparken girilen bilginin ilk karakterinin ASCII kodunu geriye göndermektedir. Bu örnek program çalıştırılıp Hangi Yıldayız : sorusuna A ile cevap verilirse ekrana 65 yazılır. Çünkü A harfinin ASCII kodu 65 dir. Console sınıfının ReadLine() metodu ise farklı bir şekilde çalışmaktadır ve konsoldan yani DOS penceresinden okuduğu bilginin String tipte olduğunu varsaymaktadır. Bu nedenle yukarıda verdiğimde örnekte değişiklik yapıp okuma işlemini Read() yerine ReadLine() metodu ile yapmaya çalıştım. class Deneme static void Main(string[] args) int yil; System.Console.Write("Hangi Yıldayız : "); yil = System.Console.ReadLine(); System.Console.Write("Girdiğiniz Yıl :"); System.Console.WriteLine(yil); Bu şekilde değiştirdiğimiz C# programını derlemeye çalışırsak hata meydana gelir. Çünkü ReadLine() metodu tarafından okunup geriye gönderilen bilgi String tipte olmasına rağmen burada int tipindeki değişkene aktarmaya çalışıyorum. Bu hatanın önüne geçmek için yil adını verdiğim değişken yerine string tipte bir değişken tanımlayıp kullandım. Daha önce az çok kod yazmış olanların bileceği gibi aşağıda verdiğim kodun hiç bir orijinal tarafı yoktur. Buna rağmen Prof. unvanlı birisi "bu kodda

29 Memik Yanık - C# a Başlangıç Kitabı 29 Memik Yanık başka kaynaklardan çalıntı yapmıştır" diye rapor tanzim ederse, ona "haklısın hocam sizden iyi bilecek değiliz" demekten elimizden başka bir şey gelmez. class Deneme static void Main(string[] args) string str; System.Console.Write("Hangi Yıldayız : "); str = System.Console.ReadLine(); System.Console.Write("Girdiğiniz Yıl :"); System.Console.WriteLine(str); Bu hali ile programımız istediğimiz sonucu verir. Bu örnekte konsoldan girilen yıl bilgisi matematiksel işlemlerde kullanılmadığı için rakamlardan meydana gelse bile string yani karaktersel bilgi olarak değerlendirmenin bir sakıncası olmaz. Şimdi bu örnekte değişiklik yapıp kullanıcıdan 2 sayısal bilgi isteyip bunları birbirleri ile çarptıktan sonra sonucu ekrana yani konsola yazacağım. Bu amaçla önce 2 string değişken tanımlayıp Console sınıfının ReadLine() metodu ile okunan bilgileri bu değişkenlere aktardım. Bu program bu hali ile kaydedilip çalıştırılırsa konsoldan girilen bilgiler string değişkenlere aktarılır. Bu örnekteki amacımız kullanıcının sayısal bilgi girmesini ve bu sayıları birbiri ile çarpıp ekrana yazmak olduğu için matematiksel işlem öncesi String değişkenlerin içeriğini int tipindeki

30 30 Memik Yanık - C# a Başlangıç Kitabı değişkenlere aktarmak gerekir. Bu amaçla bu C# programına ekleme yapıp int tipinde 2 değişken tanımladım. Ardından string değişkenlerin içeriklerini dönüştürüp int tipindeki bu değişkenlere aktardım. class Deneme static void Main(string[] args) string str1; string str2; int sayi1; int sayi2; System.Console.Write("Đlk sayıyı girin : "); str1 = System.Console.ReadLine(); System.Console.Write("Đkinci sayıyı girin: "); str2 = System.Console.ReadLine(); sayi1 = System.Int16.Parse(str1); sayi2 = System.Int16.Parse(str2); Bu kodda sizin için yeni olan System adlı namespace de yer alan Int16 yapısıdır. String bilgiyi int tipindeki değişkene aktarırken bu yapının Parse() metodunu kullandım. Bazı kaynaklarda Int16 yapısından Class diye söz edilmiş olsa bile bunu sorun yapmamak gerekir. Bu dönüştürme işlemini yaparken Int16 yerine Int32 yapısının Parse() metodunu kullanabilirdim. Merak edenlere duyurmak isterim: Memik Yanık'ın yıllar önce yayınlanan Clipper kitabından bu yana yazdığı bütün kitaplarda integer tipindeki değişkenlere ad ararken tercihini Sayi1 ve Sayi2'den yana kullandı. Ne varki sayi1, sayi2'yi değişken adı olarak seçmesi onun değişken adı hırsızı olarak suçlanmasına neden oldu? Bu kodda tanımlanan değişkenlere Sayi1, Sayi2 gibi adlar vermenin mecburiyet olmadığının kanıtlamak için bu kodu aşağıdaki gibi düzenledim. Hiç kaygılanmayın bu değişkenlere gavurca adlar seçildiğinde bile kod hatasız çalışıyor. Çevrenizde "hayır bu kodun çalışabilmesi için değişken adının mutlaka sayi1, sayi2 olarak seçilmesi şarttır diyen öğretim üyelerine, millete programcılık öğreten kurs sahiplerine rastlarsanız "hocam haklısınız, C# derleyicisi C# ın kurallarını sizden iyi mi bilecek?" deyiniz. class Deneme static void Main(string[] args) string str1, str2;

31 Memik Yanık - C# a Başlangıç Kitabı 31 int number1, numberi2; System.Console.Write("Đlk sayıyı girin : "); str1 = System.Console.ReadLine(); System.Console.Write("Đkinci sayıyı girin: "); str2 = System.Console.ReadLine(); number1 = System.Int16.Parse(str1); number2 = System.Int16.Parse(str2); Hemen bir hatırlatmada bulunmak isterim:her ne kadar bu örnekte kullanıcıya "sayı girin" mesajı verilmiş olunsa bile kullanıcı konsoldan sayısal bilgi yerine karaktersel bilgi girerse Parse() metodu dönüştürme yapamayacağı için hata meydana gelir. Bu tip karşılaşılması muhtemel hataların önüne geçmek için hata kontrol blokları hazırlanabilir. Tabii bu e- book ta try-catch deyimlerinden söz etmeyeceğiz. Merak edenler C# 3.0 kitabımdan alıp kişisel sitemde sizinle paylaştığım Hata Yakalamak ve Exception Sınıfları makalesine bakabilirler. Bu makaleyi okuyanlar sıfıra bölme hatasını anlatmak için gerekli değişkenlere ad seçerken başka Türkçe kaynaklardan çalıntı yapmanın şart olup olmadığını öğrenirler(!). Bu şekilde konsoldan girilen bilgileri Parse() metodu ile dönüştürüp int tipindeki değişkenlere aktardıktan sonra matematiksel işlem yapabiliriz. Matematiksel işlem sonucu bulunacak değeri aktarmak üzere int tipinde 3. bir değişken tanımladım. Bu kodu dikkatice incelerseniz bir satırda aynı tipte birden fazla değişkeni tanımlamış olduğumuzu görürsünüz. Hemen hatırlatmak gerekirse; bu programı derleyip çalıştırıp sonra 1. sayı ile 2. sayının çarpımı sonucu elde

32 32 Memik Yanık - C# a Başlangıç Kitabı edilen sayısal bilgi den büyük olursa hata meydana gelir. Ayrıca string bilgileri Int16 yapısının Parse() metodu ile dönüştürdüğümüz için konsoldan girilen sayılar den büyük olmamalı. Int16 yapısının Parse() metodu yerine Int32 yapısının Parse() metodunu kullansaydım 1. veya 2. sayı gibi büyük bir değer olabilirdi. Çarpma işlemi sonucu bulunan değeri Console sınıfının WriteLine() metodu sayesinde direk konsola yazmak mümkün olmasına rağmen amacım bazı konuları anlatmak olduğu için üçüncü bir string değişken tanımlayıp çarpma işlemi sonucu bulunan değeri dönüştürüp bu değişkene aktardım. Bu işlemi nasıl yaptığımı aşağıda görebilirsiniz. class Deneme static void Main(string[] args) string str1,str2, sonuc_str; int sonuc, sayi1, sayi2; System.Console.Write("Đlk sayıyı girin : "); str1 = System.Console.ReadLine(); System.Console.Write("Đkinci sayıyı girin: "); str2 = System.Console.ReadLine(); sayi1 = System.Int32.Parse(str1); sayi2 = System.Int32.Parse(str2); sonuc = sayi1 * sayi2; sonuc_str = System.Convert.ToString(sonuc); Dikkat ederseniz burada int tipindeki değişkenin içeriğini string tipindeki değişkene aktarabilmek için Convert sınıfının ToString() metodundan yararlandım. C# ile az çok uğraşmış olanlar bu işlemin daha kısa bir yolunun olduğunu ileri sürebilirler. Bu arkadaşlar haklıdırlar; dönüştürme yaparken Convert sınıfının ToString() metodu yerine Object sınıfının ToString() metodunu kullanabilirsiniz. Object sınıfının ToString() metodunun nasıl kullanıldığını daha sonra anlatacağım. ToString() metodu ile integer bilgiyi string bilgiye dönüştürdükten sonra WriteLine() metodu ile konsola yazdım. Tabii bu kısa açıklamayı yapmasaydım bazı üniversitelerin öğretim üyeleri "Parse() metodunun nasıl kullanıldığını Memik Yanık'ın bilmesine imkan yoktur. Mutlaka başka Türkçe kitaplardan çalıntı yapmıştır" diyebilirlerdi.

33 Memik Yanık - C# a Başlangıç Kitabı 33 class Deneme static void Main(string[] args) string str1,str2, sonuc_str; int sonuc, sayi1, sayi2; System.Console.Write("Đlk sayıyı girin : "); str1 = System.Console.ReadLine(); System.Console.Write("Đkinci sayıyı girin: "); str2 = System.Console.ReadLine(); sayi1 = System.Int32.Parse(str1); sayi2 = System.Int32.Parse(str2); sonuc = sayi1 * sayi2; sonuc_str = System.Convert.ToString(sonuc); System.Console.WriteLine("Sayıların çarpımı :"+ sonuc_str); System.Console.Write("Devam etmek için bir tuşa basın"); System.Console.Readkey(); Biraz da Namespace lerden söz edelim.. Şimdi yukarıda uzun uzun anlatılan örneği bir tarafa bırakıp başka bir örnek hazırlayacağım. C# programlarını yazarken Visual Studio veya C# için hazırlanmış Express Edition dan yararlanma yoluna henüz gitmediğimiz için CS uzantılı C# kodunu yine Not Defteri ile hazırlayacağız. Hazırladığım basit C# programını aşağıda verdim. DOS penceresinde derlenip DOS penceresinden bilgi alış verişi yapan C# programlarına konsol uygulaması adı verilmektedir. Class Sinif_1 public static void Main() System.Console.Write("Efes Pilsen Basketbol Takımı"); System.Console.ReadLine(); Bu şekilde hazırlanan C# programı DOS ortamında derlenip çalıştırılırsa belirtilen bilgi Write() metodu sayesinde DOS penceresine yani konsola yazılır. Bir sonraki satırda kullanılan ReadLine() metodu sayesinde enter tuşuna basılıncaya kadar program çalışmaya devam eder. Bu örnekte ReadLine() yerine Read() metodu kullanılsaydı değişen bir şey olmazdı. Tabii bu 3 satırlık kodda ReadLine() yerine ReadKey() metodunu

34 34 Memik Yanık - C# a Başlangıç Kitabı kullanırsanız uygulamanın çalışmasını sona erdirmek için herhangi bir tuşa basılabilir..net Framework adı verilen sınıf kitaplığı ile gelen sınıfların Namespace adı verilen yapılarda saklandığını biliyorsunuz. C# programlarında kullanmak istediğiniz Class hangi Namespace in içinde yer alıyorsa o namespace ı using deyimi ile programa dahil etmelisiniz veya yukarıda yapıldığı gibi içerdiği sınıfları kullanmak istediğiniz namespace in adını metodun önüne her seferinde yazmalısınız. DOS penceresi ile ilgili Console sınıfı System adlı Namespace te yer aldığı için Write() metodundan önce bu sınıfın yer aldığı Namespace in adını yazdım. Söz konusu Namespace teki sınıfları programınızda çok kez kullanıyorsanız her seferinde Namespace in adını bu şekilde yazmak yerine aşağıda yapıldığı gibi ilgili Namespace i using deyimi ile koda dâhil edebilirsiniz. using deyimi ile olmayan bir namespace i C# programınıza dahil etmek istemeniz yani olmayan bir namespace'in kaynaklarından yararlanmak istemeniz halinde derleme sırasında hata meydana gelir. using System; Class sinif_1 public static void Main() Console.Write("Efes Pilsen Basketbol Takımı"); Console.ReadLine(); C# programlarınızda.net Framework ile gelen Namespace lerdeki hazır sınıfları kullanmanın ötesinde kendi hazırladığınız class ları bir Namespace in içine koymanız gerekir. Yukarıda bunu yapmamış olmamıza rağmen herhangi bir hata meydana gelmedi. Çünkü programcı yazdıklarını bir Namespace e yerleştirmediği zaman C# derleyicisi kendiliğinden bir Namespace hazırlamaktadır. Şimdi yukarıda verdiğim programdaki Sinif_1 adını verdiğim Class ı bir Namespace e dahil edeceğim. using System; namespace Tokmak class sinif_1 public static void Main() Console.Write("Efes Pilsen Basketbol Takımı"); Console.ReadLine();

35 Memik Yanık - C# a Başlangıç Kitabı 35 Yukarıda bold yapılan paragrafı ve bu kısa C# kodunu; C++ veya Java gibi nesneye yönelik programlama dilleri hakkında az çok bilgi sahibi olan birisine gösterseniz şaşırıp bunda önemli olan nedir veya üzerinde durulacak ne var ki? diye size soru yöneltmesi yüksek ihtimaldir. Çünkü konuya kendi açısından bakacaktır. Bu dersleri C# veya nesneye yönelik programcılık konusunda yeni olanları düşünerek kaleme aldığım için yukarıda verdiğim kısa kod ve kalın(bold) yapılan açıklama karşısında duraklamanız normaldir. Bu düşünce ile aşağıda farklı renge boyanan paragrafı kaleme aldım. C# veya Visual Basic in.net uyumlu sürümü ile program yazanların kaçmakla kurtulamayacakları 2 kavramdan birisi Class, diğeri ise Namespace tir. Nesneye yönelik programcılığın temeli olan Class kavramı hakkında bu derslerde henüz doğru dürüst bilgi verilmemiş olmakla birlikte sanırım Class kavramı hakkında kafanızda beliren soruların üzerinde durmamayı şimdilik başarıyorsunuz Class bir yana bir de Namespace ten söz edilince kafanızdaki sorular önem kazanmaya başlamış olabilir. Birden Fazla Main() Metodu Uygulamanızda birden fazla Class varsa Main() metodunun hangi Class ta olduğunun önemi yoktur. Çünkü C# derleyicisi Main() metodunun hangi Class ta olduğunu arayıp buluyor. Uygulamadaki birden fazla sınıfta Main() metodu varsa hangisinin kullanılacağının belirtilmesi gerekir. Bu konuda bilgi vermek için aşağıdaki gibi bir C# programı hazırladım. using System; class sinif_1 public static void Main() Console.Write("Program Đlk sınıftaki Main ile başladı"); Console.ReadLine(); class sinif_2 public static void Main() Console.Write("Program Đkinci sınıftaki Main ile başladı"); Console.ReadLine();

36 36 Memik Yanık - C# a Başlangıç Kitabı Bu örneğe dikkat ederseniz Main() metodunun parametresiz olduğunu veya parantezin içine herhangi bir değişken adı yazmadığımı görürsünüz. Ayrıca bu örnekte Namespace hazırlamadığımı fark etmiş olmalısınız. Bu şekilde hazırlanan C# programı bilinen şekilde derlendiğinde hata meydana gelir. Derleme satırında hangi sınıftaki Main() metodunun kullanılmak istendiği belirtilmelidir. Bu program aşağıdaki gibi derlenirse uygulama ilk sınıftaki Main() metodundan itibaren çalışmaya başlar. Write ve WriteLine Metotları Yukarıda verdiğim örneklerde konsola yalnızca bir bilgi yazdım. Şimdi konunun anlaşılmasına katkı olması için 4 bilgiyi yazacağım. Bu amaçla aşağıda verdiğim C# programını hazırladım. Eğer saygıdeğer bir yazarımız kitabında Console sınıfının Write() metodunu anlatırken benim gibi konsola Futbol takımlarının adını yazmayı tercih etmişse yandım demektir. Çünkü i ve j gibi değişkenleri kullanmak, Selection Sort gibi bütün programcılar tarafından bilinen sıralama tekniğini kullanmanın suç olduğunu ileri süren Prof'ların olduğu bir memlekette programcılık üzerine yazmak cesaret istiyor. using System; namespace Tokmak class sinif_1 public static void Main() Console.Write("Fenerbahçe"); Console.Write("Galatasaray"); Console.Write("Beşiktaş"); Console.Write("Trabzonspor"); Console.ReadLine();

37 Memik Yanık - C# a Başlangıç Kitabı 37 Bu programda Write() metodu ile konsola 4 bilgi arka arkaya yazılmakta ve ReadLine() metodu ile programın işletimi askıya alınmaktadır. Write() metodu ile konsola bilgi yazıldıktan sonra imleç yazma işleminin tamamlandığı yerde bekleyeceği için bu program derlenip çalıştırılırsa aşağıdaki gibi bir sonuç elde edilir. Bu bilgilerin ayrı satırlara yazılmasını sağlamak için Write() yerine WriteLine() metodunu kullanabilirsiniz. WriteLine() metodu kendisine parametre olarak verilen bilgiyi belirtilen ortama(burada konsol) yazdıktan sonra imleci bir sonraki satırın başına alır. using System; namespace Tokmak class sinif_1 public static void Main() Console.WriteLine("Fenerbahçe"); Console.WriteLine("Galatasaray"); Console.WriteLine("Beşiktaş"); Console.WriteLine("Trabzonspor"); Console.Read(); Write() metodu ile konsola yazılan metnin sonuna satır başı karakterini( \n ) ekleyerek aynı sonucu alabilirsiniz. Satır başı karakterinin nasıl kullanıldığını aşağıda görebilirsiniz. using System; class sinif_1 public static void Main()

38 38 Memik Yanık - C# a Başlangıç Kitabı Console.Write("Fenerbahçe\n"); Console.Write("Galatasaray \n"); Console.Write("Beşiktaş \n"); Console.Write("Trabzonspor \n"); Console.Read(); Ey programcı olmak isteyen arkadaş: Burada anlatılanları birçok kitapta veya sitede görmüş olmalısınız. Hele hele Console sınıfının ReadLine gibi metotları hakkında bilgi içeren binlerce siteyi bulman mümkündür. Lütfen eğri otursanız bile doğru konuşun; sizce bu metnin anlatım biçiminden yani cümle şeklinden başka orijinal bir yanı var mıdır? Bence yoktur. Buna rağmen birileri çıkıp "Memik Yanık bu metni garanti benim kitaptan çalmıştır veya çeviriştir" derse nasıl bir tepki verirdiniz? Lütfen gülmeyiniz, derler.. Hem de Prof unvanına sahip birileri bu iddiayı onaylarlar. Bir sonraki bölümde C# için hazırlanmış Express Edition'dan söz edeceğiz.

39 4. BÖLÜM KONSOL UYGULAMALARI ve EXPRESS EDITION C# la ilgili ilk derse söylemiş olmama rağmen tekrar edelim: Bu derslerin amacı programcılık ve C# öğrenmek isteyenlere ilk öğrenmeleri gereken konuları anlatmaktır. C# ile çalışmaya bu dersleri okuyarak başlayanların C# öğrenme süreleri kısalacaktır, C# kitaplarında yazılanları, C# derslerinde anlatılanları anlamaları kolaylaşacaktır. Bu nedenle elinizdeki C# konulu kitapları okumadan, dokümanları incelemeden önce bu dersleri okumanızı öneriyorum. Bildiğiniz gibi Microsoft firması 2002 yılından bu yana.net Framework adı verilen sınıf kitaplığını ücretsiz olarak dağıtmaktadır. Bütün.NET Framework sürümlerinde hazır sınıflardan başka Visual Basic, C# ve C++ derleyicileri de bulunmaktadır. Başka bir deyişle herhangi bir.net Framework sürümünden yararlanıp Visual Basic veya C# diliyle uygulamalar geliştirmek mümkündür. Ne ki Not Defteri veya başka bir editörle C# veya Visual Basic programlarını yazıp DOS penceresinde derlemek zahmetli olup günümüz şartlarında iğneyle kuyu kazmak gibidir. C# la ilgili 2. ve 3. derste Not Defteri ile konsol uygulamaları geliştirip C# a alışmaya çalışmıştık. Çözüm ise Microsoft ürünü Visual Studio adı verilen program geliştirme aracından yani IDE den yararlanmaktadır. Visual Studio paketi ile hem Web uygulamaları hem C# hem C++ hem de Visual Basic dilini kullanan uygulamalar geliştirmek mümkündür. Microsoft firması 2004 yılından itibaren dillere özel ve Visual Studio nun kısıtlı özelliklere sahip sürümlerini hazırlayıp ücretsiz olarak dağıtmaya başladı. Bu sürümlere Express Edition adı verildi. Visual Studio 2008 için konuşmak gerekirse Visual Studio 2008 ile.net Framework 3.5 destekli ve istenilen programlama dilinde uygulama geliştirmek mümkün iken Visual Basic e özel Express Edition ile ancak Visual Basic uygulaması geliştirmek mümkündür. Bu söylenenlerden yola çıkarak C# için hazırlanmış Express Edition hakkında şunlar söylenebilir: Not Defteri ile uygulama geliştirmek istemeyenler ve Visual Studio yu pahalı bulup edinemeyenler Express Edition la idare edebililer. Bu bölümde C# için hazırlanmış Express Edition 2008 in program geliştirme ortamı hakkında kısaca bilgi verilecektir. Tekrar etmek gerekirse Express Edition ilgili programlama dilinin veya derleyicinin adı olmayıp program geliştirme ortamının veya yaygın bilinen adıyla IDE nin adıdır. C# için hazırlanan Express Edition yazdığınız programları derlerken.net Framework

40 40 Memik Yanık - C# a Başlangıç Kitabı ile gelen C# derleyicisinden yararlanır. Visual Basic uygulaması geliştirmek isteyenlerin Visual Basic için hazırlanmış Express Edition ı, Web uygulaması geliştirmek isteyenlerin ise Visual Web Developer Express Edition la ilgilenmeleri gerekir. Bu arada bir isimlendirme yanlışlığını vurgulayalım. Bu yanlışlığın ası kaynağı Microsoft firmasıdır. Örneğin Microsoft un sitesine bakıldığı zaman Visual Basic le ilgili Express Edition ın adı Microsoft Visual Basic 2008 Express Edition. Đlk bakışta bu adlandırmada 2008 in Visual Basic derleyicisin sürümünü işaret ettiğini sanabilirsiniz. Hal bu ki buradaki 2008 derleyicinin sürümü yerine IDE nin sürüm numarasıdır. Express Edition lar piyasaya verildiğinden bu yana bu yanlışlığa defalarca işaret etmeme rağmen bir çok kaynakta 2008 in bir Visual Basic sürümü olduğu yazılmaktadır. Visual C# Đçin Hazırlanmış Express Edition ı Kurmak C# için hazırlanmış Express Edition ı bilgisayarınıza kurmadan önce bilgisayarınıza.net Framework 2.0 veya 3.5 sürümünü kurmalısınız. C# için hazırlanmış Express Edition ın 2005 sürümünü kullanacaksanız.net Framework 2.0 sürümü yeterli olmaktadır. Express Edition ın 2008 sürümünü kullanmak istiyorsanız daha önceden.net Framework 3.5 sürümünü kurmuş olmalısınız. Đleri ki sayfalarda işaret edileceği üzere.net Framework 3.5 sürümünü bilgisayarınıza kurmadan C# için hazırlanmış Express Edition ın 2008 sürümünü kurmanız halinde Express Edition ile birlikte.net Framework ün 3.5 sürümü otomatik olarak Microsoft un sitesinden indirilip kurulur. C# ile program geliştirme konusunda henüz yolun başında olanlar için kullanılacak Express Edition sürümünün 2005 veya 2008 olmasının fazla bir önemi yoktur. Şimdi sırada C# için hazırlanan Express Edition ı kurmak var. Microsoft.com da arama yapıp aşağıda ekran görüntüsünü verdiğim sayfayı buldum. Gördüğünüz gibi bu sayfada değişik programlama dilleri için hazırlanmış olan Express sürümlerin linkleri var. Bazı Express sürümlerin birden fazla dil için hazırlanan kopyaları olduğundan Select a Language başlıklı liste kutusunda dil seçmek gerekir.

41 Memik Yanık - C# a Başlangıç Kitabı 41 Select a Language liste kutusunda Đngilizce veya başka bir dili seçtiğinizde veya Download linkini tıkladığınızda yaklaşık 2.5 MB lık vcssetup.exe dosyası indirilmek üzere sizden izin istenir. C# yerine Visual Basic ile ilgileniyorsanız Visual Basic le ilgili Download linkini tıklamalısınız.

42 42 Memik Yanık - C# a Başlangıç Kitabı Bu EXE dosyayı indirip çalıştırdığınızda ilk olarak aşağıda verdiğim diyalog kutusu ekrana gelir. Welcome Setup başlıklı bu diyalog kutusundaki onay kutusunu seçtiğinizde kurma işlemi sırasında yaşadığınız sorunlar Microsoft a iletilir. Welcome başlıklı bu diyalog kutusunda herhangi bir işlem yapmadan Next düğmesini tıklayınca bu kez ekrana lisans hakları ilgili pencere geldi. Kurma işlemine devam etmek üzere lisans hakları ile ilgili penceredeki ilgili radyo düğmesini seçip Next düğmesini tıklarsanız ekrana aşağıda verilen Installation Options diyalog kutusu gelir. Visual Studio ve C# la ilgili dokümanların indirilip kurulmasını istiyorsanız bu diyalog kutusundaki Microsoft Express MSDN... onay kutusunu seçmelisiniz.

43 Memik Yanık - C# a Başlangıç Kitabı 43 Bu arada Microsoft un sitesinden SQL Server ın Express Edition adı verilen ücretsiz sürümünün indirilip kurulmasını istiyorsanız SQL Server la ilgili onay kutusunu seçmelisiniz. C# ile geliştireceğim uygulamalarda veritabanı olarak hep Access kullanacağım demiyorsanız SQL Server ın kurulmasını sağlamalısınız. Bu metni kaleme aldığım günlerde SQL Server ın Express Edition ın en son sürüm nosu 2005 iken şu günlerde 2008 sürümü kullanıma sunuldu. SQL Server la ilgili bu onay kutusunu seçmeden C# için hazırlanan Express sürümü kuracak olursanız daha sonradan SQL Server a gerek duyduğunuzda Microsoft un sitesinden indirip kurabilirsiniz. Daha önce SQL Server ın Express sürümünü indirdiğim için tekrar indirilsin istemedim. Ayrıca bu sırada kullandığım bilgisayarda SQL Server ın Express sürümü kurulu olsaydı bu seçenek Installation Options diyalog kutusunda bulunmazdı. Ekranda Installation Options diyalog kutusu varken Next düğmesini tıkladığınızda Visual C# 2008 Express Edition ın kurulacağı sürücü ve klasörün belirlendiği Destination Folder başlıklı diyalog kutusu ekrana gelir. C# için hazırlanmış Express Edition a ait dosyalar \Program Files\Microsoft Visual Studio 9.0 klasörünün altında hazırlanan bir klasöre

44 44 Memik Yanık - C# a Başlangıç Kitabı yerleştirilmektedir. Express Edition a ait dosyaların başka bir klasöre yerleştirilmesini istiyorsanız bu diyalog kutusunda ayarlama yapabilirsiniz. Bana sorarsanız bu diyalog kutusunda herhangi bir değişiklik yapmayın ve C# için hazırlanmış Express Edition ın 2008 sürümünü varsayılan klasöre kurun. Merak edenlere hemen söyleyelim: Kullanılan bilgisayarda hem Visual Studio hem de istenen Express Edition lar olabilmektedir. Yani Express Edition kuranlar sonradan Visual Studio yu kurabilirler. Bu ekran görüntüsünü aldığım sırada kullandığım bilgisayara.net Framework 3.5 kuruluydu. Bu nedenle kurulacak bileşenlerin listelendiği bu diyalog kutusunda.net Framework 3.5 listelenmiyor. Bu sırada kullandığım bilgisayara.net Framework kurulu olmasaydı bu diyalog kutusunda kurulacağı işaret edilen seçenekler daha fazla olabilirdi. Đşleme devam etmek üzere Install düğmesini tıklarsanız kurma işlemi seçilen bileşenlere ve Internet in hazına bağlı olarak kısa sürede tamamlanır. Kurma işlemi tamamlandığında ekrana aşağıda verilen Setup Complete diyalog kutusu getirilir. Bu diyalog kutusundaki Windows

45 Memik Yanık - C# a Başlangıç Kitabı 45 Update linkini tıklayabilir veya Microsoft un sitesinden servis paketlerini(varsa) daha sonra indirip kurabilirsiniz. C# Đçin Hazırlanmış Express Editon ı Register Etmek Anlatılan şekilde kurulan Express Edition ı register etmeden 30 gün boyunca kullanabilirsiniz. Ürün ücretsiz olduğu için register işlemini sorun yapmayın derim. Đnsanlar kurdukları programı hemen kullanmak istiyorlar ve nasıl olsa 30 günüm var deyip Register işlemini erteliyorlar. Ben de bu alışkanlığa uyup Setup Complete diyalog kutusundaki Exit düğmesini tıklayıp Register işlemi sonraya bıraktım. C# için hazırlanmış Express Edition ı çalıştırdığınızda aşağıdaki gibi bir pencere ile karşılaşırsınız.

46 46 Memik Yanık - C# a Başlangıç Kitabı Bu sırada nasıl proje hazırlanıp nasıl kod yazıldığı ayrı bir konudur. Đleriki sayfalarda bu konu işlenecektir. Eski Türk filmlerindeki gibi 30 günün göz açıp kapayıncaya kadar geçtiğini varsayıp hemen Register etmeye çalışalım. Bu amaçla Help menüsünden Register Product komutunu verelim. Help menüsünden bu komutu verdiğinizde ekrana aşağıda verilen diyalog kutusu gelir. Bu diyalog kutusunda sizden register anahtarı isteniyor.

47 Memik Yanık - C# a Başlangıç Kitabı 47 Bu anahtar elimizde olmadığına göre Microsoft tan isteyeceğiz. Microsoft tan Registration anahtarını istemek için bu diyalog kutusundaki Register now linkini tıklamak gerekiyor. Bu linki tıkladığınızda karşınıza aşağıda verdiğim sayfa gelir ve mail adresinizle parolanız istenir. Gerek olmamasına rağmen bu işlem için başka bir mail adresini kullanmak istiyorsanız veya mail adresiniz yoksa Sign up now düğmesini tıklayıp Hotmail den yeni bir adres edinebilirsiniz. Mevcut mail adresinizi ve parolanızı girip Sing in düğmesini tıkladığınızda ekrana aşağıda verilen sayfa getirilerek sizden bazı ek bilgiler istenir.

48 48 Memik Yanık - C# a Başlangıç Kitabı Đstenen bilgileri girip sayfanın alt kısmındaki Continue düğmesini tıklayıp işleme devam ettiğinizde aşağıda verilen sayfa ekrana getirilerek sizin için hazırlanan kayıt anahtarı sayfaya yazılır. Bu anahtarı kopyalayıp Help menüsündeki Register Product komutu ile ekrana getirilen diyalog kutusuna yapıştırmak gerekiyor. Aşağıda verilen ekran görüntüsünü bu işlemi yaptıktan sonra aldım.

49 Memik Yanık - C# a Başlangıç Kitabı 49 Register anahtarını bu diyalog kutusuna yapıştırıp Complete Registration düğmesini tıkladığınızda işlem tamamlanmış olur. Anlatılan şekilde Express Edition ı register edip ondan sonra Help menüsünden Register Product komutunu verdiğinizde ekrana aşağıdaki gibi bir diyalog kutusu getirilerek ürünün zaten kayıtlı olduğu işaret edilir. Visual C# 2008 Express Edition ı(bu adlandırma kafaları karıştırdığı için zaman zaman C# için hazırlanan Express Edition deme gereğini duyuyorum) kurup çalıştırırsanız aşağıdaki gibi Visual C# 2008 Express Edition penceresi ile karşılaşırsınız. Bu ekran görüntüsünü dikkatlice incelediğinizde pencerenin sol tarafında gizlenmiş Toolbox penceresinin sağ tarafında ise açık durumda olan Solution Explorer penceresinin olduğunu görürsünüz. Kurup çalıştırdığım Express Edition in 2005 sürümü olsaydı aşağıdaki gibi sonuçla karşılaşırdım. Bu derslerin içeriği bağlamında Express Edition ın 2005 ile 2008 sürümü arasında pek fark yoktur.

50 50 Memik Yanık - C# a Başlangıç Kitabı Visual C# 2005/2008 Express Edition çalıştırıldığında yeni proje hazırlayabilmeniz veya mevcut projeleri açabilmeniz için Start Page ekrana getirilmektedir. Recent Projects kutusundaki Open ve Create seçenekler ile mevcut projeleri açabilir ve yeni projeler hazırlayabilirsiniz. Đsterseniz Start Page sayfasını kapatabilirsiniz. Bazı arkadaşlarımız C# ile çalışırken Express Edition yerine Visual Studio yu tercih edebilirler. Bu dersler bağlamında Visual Studio ile Express Edition birbirinden pek farklı değildir.

51 Memik Yanık - C# a Başlangıç Kitabı 51 Proje Hazırlamak Daha önce açılıp kapatılan C# projeleri Start Page sayfasında Recent Projects kutusunda listeleniyor. Mevcut projelerden birisini açmak istiyorsanız Open seçeneğinin karşısındaki Project linkini tıklayabilir veya File menüsünden komut verebilirsiniz. Yeni bir C# projesi hazırlamak üzere Start Page deki Create seçeneğinin yanındaki Project linkini tıklarsanız ekrana New Project diyalog kutusu gelir. Bu diyalog kutusunda Visual C# için hazırlanan Express Edition ile birlikte verilen şablonlar listelenmektedir.

52 52 Memik Yanık - C# a Başlangıç Kitabı Bu sırada C# için hazırlanmış Express Edition yerine Visual Studio kullanıyor olsaydım New Project diyalog kutusunda daha fazla seçenek olurdu. Çünkü Visual Studio ile C# uygulamalarından başka Visual Basic, C++ ve Web uygulamalarını geliştirmek mümkündür. Madem daha önceki derslerde DOS penceresinde derlenip çalıştırılan C# programları hazırladık; kaldığımız yerden devam etme niyetine bir konsol uygulaması hazırlayalım. Bu amaçla New Project diyalog kutusunda Console Application şablonunu seçip Name kutusuna konsol uygulamasına vermek istediğim adı yazdım. Bu şablonu seçip OK düğmesini tıklarsanız aşağıdaki gibi bir Express Edition penceresi ile karşılaşırsınız. Express Edition tarafından hazırlanan bu kodu incelerseniz size yabancı gelen fazla bir şeyin olmadığını fark edersiniz. Şimdiye kadar anlattıklarımıza ek olarak using deyimiyle System.Collections.Generic, System.Linq ve System.Text adlı namespace lerdeki sınıflardan yararlanılmak istendiği işaret edilmiştir. Zaten daha önce verdiğimiz kısacık örneklerde bu namespace lerdeki sınıflara gerek duymamıştık. New Project diyalog kutusunda uygulamaya vermiş olduğum ad aynı zamanda Namespace adı olarak kullanılmış. Devamında Program adında bir Class hazırlanmış. Başka bir deyişle Express Edition, kod dosyasının adını aynı zamanda Class adı olarak kullanmış. Tabii sizler bu Class a yani sınıfa başka

53 Memik Yanık - C# a Başlangıç Kitabı 53 bir ad verebilirsiniz. Her C# uygulamasında Main() metodunun olması zorunlu olduğu için bu Class ın sınırları içinde Main() metoduna yer verilmiş. Bu şartlarda Proje1 adını verdiğim konsol uygulaması henüz kaydedilmiş değildir. Şimdi henüz herhangi bir değişiklik yapmadığımız bu konsol uygulamasını kaydedelim. Bu amaçla Express Edition ın File menüsünden Save All komutunu verebilir veya Standard araç çubuğundaki Save All düğmesini tıklayabilirsiniz. File menüsünden Save All komutunu verdiğinizde ekrana aşağıda verdiğim Save Project diyalog kutusu gelir. Her ne kadar projeyi veya konsol uygulamasını hazırlarken New Project diyalog kutusunda bir ad vermekle birlikte projeyi kaydederken bu adı değiştirme imkanımız var. Projeye vermek istediğiniz adı Name kutusuna, projenin kaydedileceği klasörü ise Location klasörüne yazmanız gerekir. Klasör adını doğrudan yazmak yerine Browse düğmesini tıklayıp mevcut klasörlerden birsini seçebilirsiniz. Save Project diyalog kutusuna ayrıca Solution Name başlıklı bir metin kutusu bulunmaktadır. C# için hazırlanmış Express Edition veya Visual Studio sayesinde hazırlanan bir veya birden fazla proje bir araya getirilerek Solution hazırlanmaktadır. Başlangıçta proje adı ile proje grubu işlevi gören Solution adının aynı olacağı varsayılmaktadır. Projenin kaydı sırasında hazırlanan dosya veya klasörleri sizlere göstermek için Solution a farklı bir ad verdim. Express Edition veya Visual Studio ile hazırlanan projelerin geçerli kullanıcıya ait Belgelerim klasörünün altındaki Visual Studio 2008\Projects klasörüne kaydedilmek istendiği varsayılmaktadır. Bu konsol

54 54 Memik Yanık - C# a Başlangıç Kitabı uygulaması için Express Edition tarafından hazırlanan klasör ve dosyalara dikkatinizi çekmek için Location metin kutusuna C:\Projeler yazdım. C# projesi hazırlanırken belirtilen klasörün altında önce Solution ile aynı ada sahip bir klasör hazırlanıyor. Ardından Solution a ait klasörün içinde proje için ayrı bir klasör hazırlanmaktadır. Çünkü Solution lar çok sayıda projeye sahip olabilirler. Proje için hazırlanan klasör ve dosyaları aşağıda görebilirsiniz. Bu ekran görüntüsünü incelerseniz Solution için hazırlanan klasörün içinde proje ile aynı ada sahip bir klasörün hazırlanıp projeye ait dosyaların bu klasöre yerleştirildiğini görebilirsiniz. Solution birden fazla projeden meydana gelmeyecekse Solution ile projeye ait dosyaların bir arada olmasını sağlayabilirsiniz. Solution için ayrı bir klasör hazırlanmasını istemiyorsanız Save Project diyalog kutusundaki Create directory for solution onay kutusunu pasif duruma getirmelisiniz. Bu onay kutusunu pasif duruma getirdiğinizde Save Project diyalog kutusunda Solution a ad veremezsiniz. Aşağıda verilen ekran görüntüsünü Create directory for solution onay kutusunu pasif duruma getirip Proje1 adında bir konsol uygulaması hazırladıktan sonra aldım.

55 Memik Yanık - C# a Başlangıç Kitabı 55 Eminim ki bu dersleri izleyenlerin çoğunluğu şimdiye kadar bilgisayarlarına Express Edition ı kurdular ve bu metni okurken bir taraftan yukarıda yaptığım gibi kendileri de konsol uygulaması hazırladılar. Bu ekran görüntüsüne veya kendi hazırladığınız proje için hazırlanan klasöre bakarsanız Express Edition ın konsol uygulaması için çok sayıda klasör ve dosyayı hazırladığını fark etmiş olmalısınız. Beni dinlerseniz şimdilik kafayı bu dosyaların işlevine takmayın. C# için hazırlanmış Express Edition ile yukarıda anlatılan şekilde hazırlanan projeyi çalıştırırsanız projenin çalışması ile çalışmasının sona ermesi bir olur. Projenin veya konsol uygulamasının çalışmasının hemen sona ermesini engellemek için Program.cs dosyasındaki Main() metoduna aşağıdaki gibi 3 satır ekledim. using System; using System.Collections.Generic; using System.Text; namespace Proje1 class Program static void Main(string[] args) System.Console.WriteLine(" System.Console.Write("Çıkmak için bir tuşa basın"); System.Console.ReadKey();

56 56 Memik Yanık - C# a Başlangıç Kitabı Bu satırlar Express Edition penceresinde Main() metodu ile sınırlanan bloğa yazılıp sonra da Debug menüsünden Start Debugging komutu verilir veya Standard araç çubuğundaki Start Debugging düğmesi tıklanırsa Express Edition otomatik olarak derleme yapıp EXE dosyayı hazırlayıp çalıştırır. Aşağıda verdiğim ekran görüntüsünü bu konsol uygulamasını Debug menüsündeki Start Debugging komutu ile çalıştırdıktan sonra aldım. Express Edition tarafından hazırlanan EXE dosya projeye ait klasörün altındaki Bin klasörü içinde yer alan Debug klasörüne kaydedilir. Bu EXE dosyayı alıp.net Framework kurulu başka bilgisayarda çalıştırabilirsiniz. Fırsattan istifade hemen kısa bir reklam arası vereceğim: Daha önce Visual Studio veya Express Edition ı temel alan herhangi bir programcılık kitabını incelemiş olanların malumu olduğu gibi dünyanın hiçbir yerinde hiç kimse Visual Studio veya Express Edition ı böyle anlatmıyor. Hele hele biraz sonra anlatacaklarımı hiçbir kitabın başlangıç sayfalarında bulamazsınız. C# veya.net uyumlu başka programlama dili hakkında kitap veya makale yazanlar burada anlattıklarımı bilmiyorlar mı? Bilmez olurlar mı? Mutlaka bilirler, belki de bazıları Memik YANIK tan daha iyi biliyorlardır. O zaman neden

57 Memik Yanık - C# a Başlangıç Kitabı 57 anlatmazlar bunları? Nedeni çok basit: Onların Memik YANIK gibi ilk okumada anlaşılma gibi bir kaygıları yoktur. Tabii Memik YANIK ilk okumada mutlaka anlaşılacağım dediği için veya böyle bir tercihi olduğu için başka yazarların 10 sayfada anlattıklarını Memik YANIK ortalama 12 sayfada anlatır. Bu nedenledir ki bazıları her fırsatta Memik YANIK kitaplarını ekran görüntüleri ile doldurup şişiriyor diye suçlarlar. Bu derslerde yer ve sayfa sorunu olmadığı için kitaplarda kullandığımda çok daha fazla ekran görüntüsüne yer verdim. Express Edition tarafından hazırlanan SLN uzantılı dosya Solution dosyasıdır. Tekrar etmek gerekirse Solution lar proje grubu gibi işlev görmekte ve birden fazla proje üzerinde çalışıldığı zaman kolaylıklar sağlamaktadır. Bu örnekte konsol uygulamamız bir projeden meydana geldiği için SLN uzantılı dosyayı şimdilik unutabiliriz. Buradaki csproj uzantılı dosya ise proje dosyasıdır. csproj uzantılı proje dosyalarında projedeki form ve class lar hakkında bilgi bulunmaktadır. Express Edition tarafından hazırlanan proje dosyasının içeriğini size göstermek için Not Defteri nden yararlandım. XML formatındaki bu dosyaya ilgisiz kalabilirsiniz. Konsol uygulaması için Express Edition tarafından hazırlanan SLN ve CSPROJ uzantılı dosyalarla ilgimizi şimdilik kopardıktan sonra geriye bir tek program.cs dosyası kaldı. Şimdi Program.cs dosyasını Not Defteri ile açıp içeriğini size göstereceğim.

58 58 Memik Yanık - C# a Başlangıç Kitabı Gördüğünüz gibi bu satırlar Express Edition penceresinde yazdıklarımızla aynıdır. Daha önceki C# sürümlerini ve Visual Studio 2003 ü kullananlar için söylemek gerekirse; Microsoft firması Visual Studio 2005 ve C# 2.0 dan itibaren C# projelerinde Program.cs adında bir dosya hazırlamaya başladı. Konsol uygulamalarında başlangıçta kod içeren bir tek Program.cs dosyası olduğu için uygulama çalıştırıldığında işletilmesini istediğiniz satırları Main() metodunun içine yazabilirsiniz. Şimdi öyle bir ayarlama yapacağım ki bu uygulama çalıştırıldığı zaman ekrana bir pencerenin gelmesini sağlayacağım.

59 Memik Yanık - C# a Başlangıç Kitabı 59 Bu kodu dikkatlice incelerseniz using deyimiyle System.Windows.Forms adlı namespace deki Class lardan yararlanılmak istendiği belirtilmiş. Aynı satırı sizler yazmaya kalkışırsanız hata meydana gelir. Çünkü bu Namespace.NET Framework ile gelen System.Windows.Forms.dll adlı DLL dosyasında yani referansta yer almaktadır..net Framework e ait klasöre baktığınızda bu dosyayı görebilirsiniz. Konsol uygulamaları dahilinde ekrana pencere getirmek için bu DLL dosyasının konsol uygulamasına dahil edilmesi gerekiyor. Başka bir deyişle Express Edition ın bu referans hakkında bilgilendirilmesi gerekir. Bunun için Express Edition penceresi içinde yer alan Solution Explorer penceresinden yararlanıp Add Reference diyalog kutusunu ekrana getirip System.Windows.Forms.dll referansını uygulamaya dahil etmelisiniz. Aşağıda verdiğim ekran görüntüsünü bu referans yani DLL dosyasını uygulamaya dahil ettikten sonra aldım. Her ne kadar burada referansın uygulamaya dahil edildiğinden söz edilse bile gerçek tam böyle değildir. Yapılan, Express Edition ın dolayısıyla C# derleyicisinin bu referanstan yararlanılmak istendiği konusunda haberdar edilmesinden ibarettir.

60 60 Memik Yanık - C# a Başlangıç Kitabı Bu konuda daha sonra bilgi verileceği için bu örneği denemeyebilirsiniz. Konsol uygulamaları üzerinde fazla durmayacağım için referans nedir gibi soruları atlıyorum. Yukarıda verdiğim konsol uygulaması çalıştırıldığı zaman önce bir DOS penceresi açılır. Ardından yaptığım hazırlıktan dolayı ekrana bir pencere gelir. Bu pencereyi kapattığınızda konsol uygulamasının çalışması sona erer ve DOS penceresi kapatılır. Buna rağmen yukarıda verilen kodun üzerinde biraz duralım. Main() metoduna yazdığım bu satırların ilkinde Form1 adında ve System.Windows.Forms adlı Namespace teki Form sınıfı tipinde bir değişken tanımlanmaktadır. Devamında new anahtar kelimesi ile Form sınıfının örneğini alıp(yani nesne hazırlayıp) referansını Form1 adını

61 Memik Yanık - C# a Başlangıç Kitabı 61 verdiğim değişkene aktardım. En son olarak bu Form nesnesini Application sınıfının Run() metoduna parametre olarak verdim. Dikkat ederseniz burada tanımladığım değişkene Form1 adını verdim. Yarın bir gün birisi çıkıp bu değişken adını yani Form1 i kendi namı hesabıma Register ettim derse gülüp geçin. Windows Forms Uygulamaları Daha önceki derslerde söylendiği gibi konsol uygulamalarına çok az ihtiyaç duyacağınız için Express Edition ile hazırlanan konsol uygulamaları üzerinde fazla durmaya gerek duymadan Windows Forms denilen normal uygulamalara odaklanacağız. Bu nedenle yukarıda hazırladığım konsol uygulamasını kapatıp ekrana New Project diyalog kutusunu getirip Windows Application şablonunu seçtim. C# için hazırlanan Express Edition ile hazırlanan projelerde New Project diyalog kutusunda projeye verilen ad sonradan değiştirilebilmektedir. Projeye vermek istediğim adı Name kutusuna yazıp OK düğmesini tıklayınca aşağıdaki gibi bir Visual C# 2005 Express Edition penceresi ile karşılaştım.

62 62 Memik Yanık - C# a Başlangıç Kitabı Windows Application şablonu ile hazırlanan projeye bir form dahil edilmekte ve bu formun görsel yapısı Express Edition penceresine gerilmektedir. Bu proje üzerinde herhangi bir değişiklik yapmadan Debug menüsündeki Start Debugging komutu ile çalıştırırsanız karşınıza bu form veya pencere gelir. Bu formun üzerine hemen düğmeler, TextBox lar veya ListBox lar yerleştirmek yerine Windows Application şablonu ile hazırlanan projenin özelliklerine biraz bakalım. Bu amaçla Solution Explorer penceresini açtım.

63 Memik Yanık - C# a Başlangıç Kitabı 63 Express Edition ile C# projesi hazırlandığı zaman çok kullanılan bazı referanslar veya namespace ve sınıfları içeren DLL dosyaları projeye dahil edilmektedir. Hatırlarsanız yukarıdaki sayfalarda konsol uygulaması dahilinde ekrana form veya pencere getirmek için System.Windows.Forms deki Form adlı sınıftan yararlanmıştık. Üzerinde çalışılan projede.net Framework ile gelen sınıflardan birisinden yararlanmak için o sınıfın yer aldığı Namespace i içeren DLL dosyasının yani referansın projeye dahil edilmesi(daha doğrusu Express Edition ı bu DLL den haberdar edilmesi) gerektiği için Solution Explorer penceresinden yararlanıp Add Reference diyalog kutusunu ekrana getirmiştik. Benzer durum Express Edition ile hazırlanan Windows Forms uygulamaları için de geçerlidir. Visual C# 2008 Express Edition en çok gerek duyulan referansları projelere kendisi dahil ettiğinden bir süre için referanslar ile ilgilenilmeyebilir. Express Edition ile hazırlanan projelere dahil edilen referansları size göstermek için Solution Explorer penceresinde References seçeneğine ait artı(+) işaretini tıkladım.

64 64 Memik Yanık - C# a Başlangıç Kitabı Gördüğünüz gibi Express Edition tarafından 6 referans veya DLL dosyası Windows Forms uygulamalarına otomatik olarak dahil edilmektedir. Yararlanmak istediğiniz sınıf hangi DLL dosyası veya referansta yer alıyorsa o referansın Solution Explorer penceresinden yararlanılarak projeye dahil edilmesi gerekir..net Framework ile gelen herhangi bir sınıftan yararlanabilmek için referansın projeye dahil edilmesi yetmez ayrıca ilgili Namespace in Imports deyimi ile koda dahil edilmesi gerekir. Birçok yerli yabancı kaynakta bu altını çizdiğim paragrafın benzerini bulma ihtimaliniz yüksektir. Bu paragrafta söylenenler yanlış olmasa bile eksiktir ve okurun konuyu en başından yanlış kavramasına neden olmaktadır. Gelin bu paragrafı yeniden yazalım:.net Framework ile birlikte çok sayıda DLL dosyası gelmektedir ve dosyalar Windows un kurulu olduğu klasörün altındaki Microsoft.NET\Framework klasörüne yerleştirilmektedir. Daha önce söylendiği gibi bu DLL dosyalarında Namespace ler bulunmaktadır. Örneğin System.Windows.Forms.dll adlı dosyada System.Windows.Forms adlı namespace yer almaktadır. Namespace lerde

65 Memik Yanık - C# a Başlangıç Kitabı 65 ise Class lar ve/veya yapılar bulunmaktadır. Uygulamanızda hangi Class ı kullanmak istiyorsanız o Class ın yer aldığı namespace i içeren DLL dosyasını yani referansı Solution Explorer penceresinde listelemeniz gerekiyor. Bir referansı Solution Explorer penceresinde listelemek demek bir bakıma Visual Studio veya Express Edition a bu referanstan yararlanmak istiyorum demektir. Yoksa uygulamaya dahil edilen bir şey yoktur. Söz konusu DLL dosyası yerinde duruyor. Yararlanmak istediğiniz sınıfın yer aldığı Namespace i içeren DLL dosyasını Solution Explorer penceresinde listeledikten sonra aşağıda verdiğim kodda olduğu gibi Class adından önce namespace adını yazarak söz konusu namespace teki istediğiniz gibi Class tan yararlanabilirsiniz. static void Main(string[] args) System.Windows.Forms.Form Form1; Form1 = new System.Windows.Forms.Form(); Form1.Text = "memikyanik.com"; System.Windows.Forms.Application.Run(Form1); Her seferinde Class adından önce Namespace adını yazmak istemiyorsanız using deyimiyle söz konusu Namespace teki Class lardan yararlanmak istediğinizi Visual Studio veya Express Edition a belirtebilirsiniz. Buradaki using deyimi DOS un Path komutu ile benzer işleve sahiptir. using System; using System.Windows.Forms; namespace Proje1 class Program static void Main(string[] args) Form Form1; Form1 = new Form(); Form1.Text = "memikyanik.com"; Application.Run(Form1); Üzerinde çalışılan proje hakkında bilgi edinilmek istendiği zaman başvurulan Solution Explorer penceresini dikkatlice incelerseniz projedeki formla ilgili olarak 3 dosyanın hazırlanmış olduğunu görürsünüz. Burada dikkatinizi öncelikle Program.cs dosyasına çekmek istiyorum. Daha önceki derslerden

66 66 Memik Yanık - C# a Başlangıç Kitabı bildiğiniz gibi C# projelerinin başlangıç noktası Main() metodudur. Express Edition veya Visual Studio ile hazırlanan projelerde Main() metodu Program.cs adlı kod dosyasında bulunduğu için bu dosya önemlidir. Her ne kadar bu dosya önemlidir desem bile bu dosyaya kayıtsız kalıp usta işi programlar yazmak mümkündür. Ne ki işin geri planının anlaşılması için bu dosyanın üzerinde biraz durmak bir zorunluluk. Solution Explorer penceresinde Program.cs dosyasını çift tıklarsanız bu kod dosyasının içeriği görüntülenir. Express Edition tarafından hazırlanan bu kodu dikkatlice incelerseniz System, System.Collections.Generic ve System.Windows.Forms adlı 3 Namespace deki sınıfların kullanılmak istendiği konusunda using deyimiyle ayarlama yapılmış olduğunu görebilirsiniz. Program.cs dosyasındaki diğer satırlar hakkında verilecek bilgilerin henüz altyapısı olmadığı için üzerinde fazla durmayacağım. Buna rağmen şu satırı dikkatinize sunmak istiyorum. Application.Run(new Form1());

67 Memik Yanık - C# a Başlangıç Kitabı 67 Bu satırı daha önce görmüş olanlar şöyle bir açıklamayı okumuş olabilirler: Uygulama Run() metodu ile başlatılmaktadır. Aslında bu tek cümlelik tanım yanlış değildir. Ne var ki bu tanım, bu satırla nelerin yapıldığını, geri planda nelerin geliştiğini açıklamaya yetmiyor. Konunun devamında anlatılacağı gibi Express Edition ile bir Windows Forms uygulaması hazırlandığında System.Windows.Forms adlı Namespace teki Form adlı Class ın mirasçısı Form1 adında bir Class hazırlanmaktadır. Đşte bu satırda Form1 adlı Class ın örneği alınıp yani nesne hazırlanıp Application sınıfının Run() metoduna parametre olarak verilmektedir. Yeterince açık olmayan bu 2 cümlenin açıklamasını bir sonraki bölüme bırakıyorum.

68 5. BÖLÜM VISUAL STUDIO ĐLE PROGRAM GELĐŞTĐRMEK Bu derste Visual Studio nun program geliştirme ortamı hakkında kısaca bilgi verilecektir. Daha önce Visual Studio nun herhangi bir sürümünü kullandıysanız bu bölümü atlamak isteyebilirsiniz. Bu bölüme en azından göz gezdirmenizi önermek isterim. Çünkü bu bölümde ileride işlenecek bazı konulara temel oluşturan birkaç ayrıntıdan söz edilmektedir. Aslında C# programlama dilinden bağımsız olarak Visual Studio hakkında yüzlerce sayfa yazılabilir. Ne ki bu derslerde böyle bir amacım yoktur. Bu derslerde amaç C# programlama dilini ve.net Framework ile gelen sınıflar hakkında başlangıç düzeyi bilgi vermek olduğu için Visual Studio hakkında kısa bir özet yapılmakla yetinildi. Visual Studio 2008 in kurulması kolay ve sorunsuzdur. Visual Studio 2008 DVD si sürücüye takıldığında veya Setup.exe programı çalıştırıldığında ekrana aşağıda verilen pencere gelmektedir. Visual Studio nun değişik sürümleri bulunmaktadır. Professional sürüm işinizi görecektir. Visual Studio nun deneme sürümünü microsoft.com dan indirebilirsiniz. Bu penceredeki ilk seçenek tıklandığında size birkaç tanıdık soru yöneltildikten sonra kurma işlemi tamamlanmaktadır. Bu tanıdık sorulardan birisi Visual Studio ya ait dosyaların kurulacağı sürücü ve klasördür. Visual Studio varsayım olarak C:\Program Files\Microsoft Visual Studio 9.0\ klasörüne kurulmaktadır.

69 Memik Yanık C# a Başlangıç Kitabı 69 Bu pencerede kurma tipi olarak Custom seçilirse Install düğmesi yerini Next düğmesine bırakır. Custom radyo düğmesini seçip Next düğmesini tıkladığınızda ekrana kurulacak bileşenlerinin seçildiği pencere gelir.

70 70 Memik Yanık - Visual C# a Başlangıç Kitabı Bu pencereden yararlanıp Visual Studio nun kurulacak bileşenlerini seçebilirsiniz. Örneğin Visual Studio ile Visual Basic veya C++ dilinde uygulama geliştirmeyi düşünmüyorsanız bu dillerle ilgili bileşenlerin kurulmalarını engelleyebilirsiniz. Visual Studio bilgisayara kurulduktan sonra Başlat menüsünde Microsoft Visual Studio 2008 adında bir program grubu hazırlanmakta ve bu program grubuna Visual Studio ya ait kısayollar dahil edilmektedir. Visual Studio kurulup başlatıldığında ekrana aşağıda verilen diyalog kutusu getirilerek program geliştirme ortamının düzenlenmesi konusunda seçim yapmanız istenir. C# programları geliştirmek istediğim için bu diyalog kutusunda Visual C# ı seçtim. Bu seçim sayesinde Visual Studio nun ortamı C# ın varsayılan seçimlerine göre ayarlanır. Bu diyalog kutusunda Visual C# ı seçtiğinizi varsayalım. Bir süre sonra Visual Basic in ayarlarına dönmek isterseniz Tools menüsünden Import and Export komutu verildiği zaman çalışmaya başlayan Wizard ın ilk adımını temsil eden diyalog kutusunda Reset all Settings radyo düğmesini seçip ortamın hangi dilin varsayılan ayarlarına göre düzenleneceği konusunda seçim yapılan bu diyalog kutusunu ekrana getirebilirsiniz.

71 Memik Yanık C# a Başlangıç Kitabı 71 Bu diyalog kutusundaki Reset all settings radyo düğmesini seçip Next düğmesiyle işleme devam ettiğinizde Wizard ekrana Choose a Default Collection of Settings diyalog kutusunu getirir. Hangi dilin ayarlarının geçerli olmasını istiyorsanız o dili seçebilirsiniz. Örneğin eski bir Visual Basic programcısı iseniz C# uygulamaları geliştirirken Visual Basic in ayarlarının geçerli olmasını sağlayabilirsiniz.

72 72 Memik Yanık - Visual C# a Başlangıç Kitabı Visual Basic in varsayılan ayarları ile Visual C# ın ayarları arasındaki önemli farklardan birisi şudur: Visual Basic ayarları geçerli iken Visual Studio sizi hazırladığınız projeyi hemen kaydetmek zorunda bırakmıyor. Tabii bu diyalog kutusunda hangi dilin varsayılan ayarlarını seçerseniz seçin sonradan Tools menüsünden Options komutu ile ekrana getirilen diyalog kutusunda ortam ayarlarında istediğiniz değişikliği yapabilirsiniz yılında yayınlanan C# kitabımda Data Adapter Configuration Wizard ile DataAdapter nesnesinin özelliklerini ayarladım diye yargılandığıma göre yarın bir gün yerli yazarın birisi çıkıp bu Import and Export Settings Wizard ı kullanmayı ilk ben akıl ettim derse sorumluluk kabul etmem. Ayrıca bu memlekette Wizard tarafından ekrana getirilen diyalog kutularının birden fazla kitapta aynı sırada olduğunu rapor edecek çok sayıda bilim adamı(!) olduğuna göre bu Wizard dan yararlanmak risk teşkil edebilir. Visual Studio çalıştırıldığında yeni proje hazırlayabilmeniz veya mevcut projeleri açabilmeniz için Start Page ekrana getirilmektedir. Bu sayfadaki Recent Projects kutusunda Open adı altında gruplanan seçenekler ile mevcut projeleri açabilirsiniz. Create adı altında gruplanan 2 seçenekten yararlanıp yeni proje hazırlayabilirsiniz.

73 Memik Yanık C# a Başlangıç Kitabı 73 Mevcut projelerden birisini açmak istiyorsanız Open adı altında gruplanan seçeneklerden Project i tıklamanız gerekir. Project seçeneğini tıklarsanız geçerli kullanıcıya ait Belgelerim klasörünün altında yer alan Visual Studio Projects klasöründeki projeler listelenir. Visual Studio ile hazırlanan her proje için ayrı bir klasör hazırlanmakta ve projeye ait dosyalar bu klasöre kaydedilmektedir. Visual Studio ile C# projesi hazırlamak üzere Start Page deki Create adı altında gruplanan 2 seçenekten Project i tıklarsanız ekrana New Project diyalog kutusu gelir. Project types kutusunda listelenen seçenekler Visual Studio nun bilgisayara kurulan bileşenlerine göre değişmektedir. C# projesi hazırlamak istediğim için Project types kutusunda Visual C# ve Templates kutusunda Windows Foms Application şablonunu seçtim.

74 74 Memik Yanık - Visual C# a Başlangıç Kitabı Tam bu noktada bazen kafaların karışmasına neden olan Visual C# ile C# ayrımına değinmek gerekiyor. Visual C#, Microsoft firmasının ticari markasıdır. Madem C# programlama dilini Microsoft firması geliştirdi ve bu kitapta Microsoft firması tarafından geliştirilen Visual Studio dan yararlanıyoruz C# ile Visual C# aynı anlamda kullanılabilir. C# uygulamalarını geliştirirken Visual Studio yerine C# için hazırlanmış Express Edition ı kullanıyor olsaydım New Project diyalog kutusunda daha az şablon listelenirdi. Aşağıda verilen ekran görüntüsü C# için hazırlanmış Express Edition a aittir.

75 Memik Yanık C# a Başlangıç Kitabı 75 Visual Studio 2003 veya 2005 ile C# projesi hazırlanmak istendiği zaman ekrana getirilen New Project diyalog kutusunda.net Framework sürümünü tercih etme imkanı yoktu. Visual Studio 2003 ile.net Framework 1.1 uyumlu projeler hazırlanabilirken Visual Studio 2005 ile.net 2.0 uyumlu projeler hazırlanabiliniyordu. Visual Studio 2008 de ise proje hazırlarken.net Framework ün 2.0, 3.0 veya 3.5 sürümlerinden birisini seçme imkanın bulunmaktadır. New Project diyalog kutusunda seçilen.net Framework sürümüne göre Templates liste kutusunda listelenen şablonlar değişmektedir. Başlangıçta projeler için(yani eğitim amaçlı projelerde).net Framework ün 2.0 veya 3.5 sürümünü seçmenin bir önemi olmamasına rağmen 3.5 sürümünü tercih ettim. New Project diyalog kutusunda.net Framework ün 2.0 sürümünü tercih ederseniz C# 3.0 ile ilgili bazı yeniliklerden yararlanamazsınız. Örneğin LINQ teknolojisi ile sorgulama yapamazsınız. New Project diyalog kutusunun alt kısmında Name seçeneğinden yararlanarak projenin adını girebilir ve Location seçeneği ile projenin kaydedileceği klasörü belirleyebilirsiniz. Visual Studio ile hazırlanan C# projelerinin geçerli kullanıcıya ait Belgelerim klasörünün altında bulunan Visual Studio Projects klasörüne kaydedileceği varsayılmaktadır. Hazırlamak istediğim projeyi C: sürücüsündeki \Projeler klasörüne kaydetmek istediğim için Browse düğmesini tıklayıp klasör seçilen Project Location diyalog kutusunu ekrana getirip bu klasörü seçtim. Yukarıda anlatılan şekilde proje hazırladığınızda Visual Studio ayrıca bir Solution hazırlamaktadır. Solution lar proje grubu gibi işlev görmektedir. Başlangıçta projenin adı aynı zamanda Solution adı olarak kullanılmaktadır. Solution a birden fazla proje dahil edeceksiniz farklı bir ad vermeniz önerilir.

76 76 Memik Yanık - Visual C# a Başlangıç Kitabı Proje hazırlanırken Visual Studio tarafından oluşturulan klasörleri gösterebilmek için Solution a farklı bir ad verdim. Bu ayarlamalardan sonra New Project diyalog kutusunu kapatırsanız Visual Studio projeyi hazırlar ve aşağıdaki gibi bir Visual Studio penceresi ile karşılaşırsınız. Başlangıçta Solution Explorer ve Properties pencereleri Visual Studio penceresinin sağ tarafına yuvalanmış durumdadır. Sol tarafta ise Toolbox gizlenmiş durumdadır. Bu ekran görüntüsü Visual Studio bilgisayara kurulduktan hemen sonra alındığı için sizin bilgisayarda Visual Studio ile ilgili pencerelerin yerleşim şekli farklı olabilir. Proje hazırlanırken belirtilen klasörün altında proje ile aynı ada sahip bir klasör hazırlanıyor. Buna göre her Visual C# projesi için ayrı bir klasör hazırlanmaktadır. Proje için hazırlanan klasör ve dosyaları aşağıda görebilirsiniz.

77 Memik Yanık C# a Başlangıç Kitabı 77 Bu ekran görüntüsünde Solution için hazırlanan klasörün içinde proje ile aynı ada sahip bir klasörün hazırlandığını görebilirsiniz. Solution birden fazla projeden meydana gelmeyecekse Solution ile projeye ait dosyaların bir arada olmasını tercih edebilirsiniz. Solution için ayrı bir klasörün hazırlanmasını istemiyorsanız New Project diyalog kutusundaki Create directory for solution onay kutusunu pasif duruma getirmelisiniz. Projeye ait klasöre kaydedilen Form1.cs uzantılı dosya projedeki formu temsil etmektedir. Formların görsel yapısı ile ilgili bilgiler Designer.cs dosyalarında tutulurken resx uzantılı dosyalarda ise formla ilgili kaynaklar(resource) tutulmaktadır. Visual Studio tarafından hazırlanan C# projesi dosyalarına csproj uzantısı verilmektedir. Visual Studio ile proje hazırladığınızda aynı zamanda bir Solution hazırlanır ve Solution a ait bilgiler sln dosyalarında saklanmaktadır. Yukarıda örnek olması için hazırladığım C# projesine "Proje1" adını verdim. Bu proje adını yerli programcılık kitabı yazarları daha önceden kendi adlarına register etmiş olabilir. Bu nedenle kendinizi riske etmeyip Proje1 yerine projelere argo veya gavurca adlar vermeniz önerilir. Örneğin Proje1 yerine Project1 veya En_baba_proje gibi adları tercih edebilirsiniz. Solution Explorer Penceresi Üzerinde çalıştığınız projeye hangi formların ve dosyaların dahil edilmiş olduğunu görmek istiyorsanız Visual Studio nun Solution Explorer penceresine bakabilirsiniz. Solution Explorer penceresinde bir bakıma projeye ait klasörün içeriği görüntülenmektedir. Solution Explorer penceresinin başlık çubuğunu çift tıklayıp bağımsız pencere olmasını sağlayabilirsiniz. Aşağıda verilen ekran görüntüsünü proje için 2. bir form

78 78 Memik Yanık - Visual C# a Başlangıç Kitabı hazırladıktan sonra aldım. Projeye 2. bir form dahil etmek demek gerçekte.net Framework ile gelen Form sınıfının mirasçısı 2. bir sınıf hazırlamak demektir. Tıpkı Form1 sınıfında olduğu gibi Form2 sınıfının bir yarısı Form2.cs dosyasında, diğer yarısı ise Form2.Designer.cs dosyasında yer almaktadır. Solution ve proje hakkında bilgi içeren bu pencereyi View menüsünden komut vererek veya Standard araç çubuğundaki ilgili düğmeyi tıklayarak ekrana getirebilirsiniz. Bu ekran görüntüsünü aldığım sırada Proje1 adını verdiğim projede Form1 ve Form2 adında 2 form vardı. Visual Studio ile hazırlanan projelerde her form için ikisi CS uzantılı 3 dosya hazırlanmaktadır. Windows Forms Application şablonu ile hazırlanan projenin kaydedildiği klasöre bakıldığında Bin ve Obj adında 2 klasörün hazırlandığı görülür. Visual Studio başlangıçta bu 2 klasörü Solution Explorer penceresinde listelemiyor. Üzerinde çalıştığınız proje ile ilgili bütün dosya ve klasörlerin listelenmesini istiyorsanız Solution Explorer penceresindeki Show All Files düğmesini tıklamanız gerekir. Bu düğmenin işlevini aşağıda görebilirsiniz. C# projesine dahil edilmiş referansları görmek istiyorsanız Solution Explorer penceresinde References seçeneğini tıklamalısınız. Visual Studio 2008 ile hazırlanan C# projelerine 8 referans otomatik olarak dahil edilmektedir. Ek

79 Memik Yanık C# a Başlangıç Kitabı 79 bir işlem yapmaya gerek kalmadan bu referanslarda bulunan namespace lerdeki sınıfları kullanabilirsiniz. DLL dosyaları veya buradaki adıyla referanslar doğaları gereği gerek duyulduğunda belleğe yüklenirler..net Framework ile gelen veya kendi hazırladığınız referanslardan birisindeki sınıflardan yararlanacaksanız References seçeneğine ait kısayol menüsünden Add Reference komutunu vermelisiniz. Her ne kadar burada referans eklemeden söz edilse bile eklenen herhangi bir şey yoktur. Yapılan şudur: Yararlanılmak istenen referanslar hakkında Visual Studio bilgilendirilmektedir. Yoksa referanslar yani DLL dosyaları ilgili klasörde durmaktadır.

80 80 Memik Yanık - Visual C# a Başlangıç Kitabı Bu komutu verirseniz ekrana Add Reference diyalog kutusu gelir. Projede kullanmak istediğiniz bileşen veya referansı seçip OK düğmesini tıklamanız yeterlidir. Bu pencerede.net sekmesinde listelenen her seçenek veya referans gerçekte.net Framework ile gelen birer DLL dosyasıdır. Kendiniz Visual Studio ile gelen Class Library şablonu ile kolayca DLL dosyaları hazırlayıp.net Framework ile gelenlerde oluğu gibi bu DLL dosyalarından yararlanabilirsiniz. Form Designer ve Code Editor Pencereleri Şimdiye kadar verilen ekran görüntülerinden tespit olabileceğiniz gibi yeni bir proje hazırlandığınızda projeye otomatik olarak dahil edilen formun görsel yapısı Visual Studio penceresinin Form Designer adı verilen orta kısımda görüntülenmektedir. Aşağıda verdiğim ekran görüntüsünü aldığım sırada projedeki ilk formun görsel yapısı görüntüleniyordu.

81 Memik Yanık C# a Başlangıç Kitabı 81 Açık olan her form veya kod dosyası için Windows Form Designer penceresinin üst kısmında bir sekme hazırlanmaktadır. Bu sırada Solution Explorer penceresinde Form2.cs nin üzerinde çift tıklama yaparsanız bu kod dosyası dahilinde hazırlanan Class ın yani Form2 nin görsel yapısı görüntülenir. Açık olan formlardan birisine ait kodları görmek istiyorsanız o formu seçip View menüsünden Code komutunu vermelisiniz. Form2 aktif form iken View menüsünden Code komutu verilirse bu formu oluşturan kodlar görüntülenir. Aşağıda verilen ekran görüntüsünü almadan önce Solution Explorer ve Properties pencerelerini gizledim. Bu kodu yakından incelediğinizde Form2 adında ve.net Framework ile gelen Form sınıfının mirasçısı bir Class ın hazırlandığını görürsünüz.

82 82 Memik Yanık - Visual C# a Başlangıç Kitabı Projedeki 2. formu temsil eden Form2 sınıfına ait kodların bir kısmı bu dosyada iken diğer yarısı Form2.Designer.cs dosyasında bulunmaktadır. Projedeki mevcut kod dosyalarını açmak için Solution Explorer penceresine başvurmak yerine File menüsünden Open-File komutunu verebilirsiniz. Kod yapısı görüntülenen formun görsel yapısını görmek istiyorsanız View menüsünden Designer komutunu vermelisiniz. Projedeki formlara ait kodları veya görsel yapılarını görüntülerken Solution Explorer penceresinden yararlanabilirsiniz. Söz konusu forma ait kısayol menüsünden View Designer komutunu verirseniz formun görsel yapısı, View Code komutunu verirseniz forma ait kodlar görüntülenir. ToolBox Penceresi Visual Studio bilgisayara kurulup başlatıldığında ekrana getirilen bir diğer pencere Toolbox penceresidir. Toolbox ta formların üzerine yerleştirebileceğiniz kontroller yani.net Framework ile gelen hazır sınıflar listelenmektedir. Visual Studio penceresinin sol tarafında Toolbox tan başka ayrıca Server Explorer penceresini temsil eden bir düğme bulunmaktadır.

83 Memik Yanık C# a Başlangıç Kitabı 83 Bu ekran görüntüsünü aldığım sırada Server Explorer penceresi açık olmasına rağmen gizlenmişti. Bu pencereden veritabanı işlemleri yapılırken yararlanılmaktadır. Bu derslerde veritabanı işlemlerinden söz edilmediği için Server Explorer penceresini kapattım. Toolbox ın otomatik gizlenme özelliğini iptal etmek istiyorsanız Auto Hide düğmesini tıklamalısınız. Auto Hide özelliği devrede değilken Toolbox penceresinin başlık çubuğunda çift tıklama yapıp bağımsız pencere olmasını sağlayabilirsiniz.

84 84 Memik Yanık - Visual C# a Başlangıç Kitabı.NET Framework ile birlikte Toolbox ta birer düğme ile temsil edilenlerden çok daha fazla kontrol verilmektedir. Üzerinde çalıştığınız forma yerleştirmek istediğiniz kontrol Toolbox ta yer almıyorsa Tools menüsünden Choose Toolbox Items veya Toolbox a ait kısayol menüsünden Choose Items komutunu verebilirsiniz. Örneğin SQL Server veya Access veritabanlarına bağlanırken kullanılan SqlConnection ve OleDbConnection kontrolleri başlangıçta Toolbox ta yer almıyor. Bu kontrollere gerek duyanların Toolbox a ait kısayol menüsünden komut verip ekrana gelen Choose Toolbox Items diyalog kutusunda ayarlama yapmaları gerekir. Toolbox ta listelenen kontrollerin birisini seçip forma yerleştirmek demek gerçekte söz konusu kontrolün yani Class ın örneğini almak olarak düşünmek gerek. Forma yerleştirilen kontrol söz konusu Class ın yani formun bir üyesi olur. Tabii Button veya TextBox gibi sınıfların örneklerini alırken yani nesne hazırlarken Visual Studio dan yararlanmak yerine bu işlemi kod yazarak yapabilirsiniz. Form ve Kod Pencerelerinin Organizasyonu Şimdiye kadar verilen ekran görüntülerinden tespit etmiş olabileceğiniz Properties, Toolbox, Solution Explorer ve Server Explorer gibi pencerelerin dışında açık olan her form için Visual Studio penceresinin orta kısmında bir sekme hazırlanmaktadır. Programcı açık olan hangi formla ilgileniyorsa o

85 Memik Yanık C# a Başlangıç Kitabı 85 formu temsil eden sekmeyi tıklar. Aşağıda verilen ekran görüntüsünü aldığım sırada açık durumda olan 3 form vardı ve Form2 nin görsel yapısı görüntüleniyordu. Programcı bu sırada Form1 veya Form2 ye ait sekmeyi tıklayıp bu formları görüntüleyebilir. Başka bir deyişle bu şartlarda form pencerelerini simge durumuna küçültmek mümkün değildir. Açık olan her formun ayrı bir pencereye sahip olmasını istiyorsanız Tools menüsündeki Options komutu ile ekrana getirilen diyalog kutusunda ayarlama yapmalısınız.

86 86 Memik Yanık - Visual C# a Başlangıç Kitabı Options diyalog kutusunda General adı altında gruplanan seçeneklerden Multiple documents radyo düğmesini seçerseniz açık olan her form ayrı bir pencereye sahip olur ve bu pencereleri simge durumuna küçültebilirsiniz. Aşağıda verilen ekran görüntüsünü Multiple documents radyo düğmesini seçtikten sonra aldım. Bu ekran görüntüsünü aldığım sırada 3 form açıktı. Bu pencerelerinin boyutlarını ve Visual Studio penceresi içindeki konumlarını istediğiniz gibi ayarlayabilirsiniz. Bu metni kaleme alırken ekran görüntülerini istediğim gibi ayarlayabilmek için Options diyalog kutusunda Multiple documents radyo düğmesini seçip formların bağımsız pencere olmalarını sağladım. Projelerinin Bileşenleri Visual Studio ile geliştirilen uygulamalara Solution adı verilmekte ve Solution larda projeler bulunmaktadır. Üzerinde çalıştığınız Solution hakkında bilgi edinmek istiyorsanız Solution Explorer penceresine bakabilirsiniz. Madem C# uygulamalarını geliştirirken Visual Studio veya Express Edition kullanıyoruz Visual Studio nun hazırladığı projeler hakkında bilgi edinmek gerekir. Visual Studio ile hazırlanan C# projelerinde formlardan ve formları temsil eden kod dosyalarından başka Program.cs adında bir kod dosyası

87 Memik Yanık C# a Başlangıç Kitabı 87 bulunmaktadır. Visual Studio veya Express Edition ile hazırlanan C# projeleri çalışmaya bu dosyadan başlamaktadır. Çünkü C# projelerinin başlangıç noktası olan Main() metodu bu kod dosyasında bulunmaktadır. Program.cs dosyası Visual Studio 2003 te yoktu. Bu dosyanın en önemli işlevi Main() metodunu içermesidir. Main() metodunu alıp başka bir kod dosyasına yerleştirirseniz Program.cs dosyasına gerek kalmaz. Madem Visual Studio kullanıyoruz bence Program.cs dosyasını aynı şekilde bırakmakta fayda vardır. C# projeleri Main() metoduna sahip olmak zorundadır. Çünkü C# projeleri tıpkı C ve C++ projelerinde olduğu gibi Main() metodundan itibaren çalışmaya başlarlar. Ayrıca Main() metodu public ve static olmalıdır. Bu örnekte Main() metodu geriye bir değer göndermediği için void olduğu işaret edildi. C# projelerinin ikinci önemli bileşenleri formlar ve formlarla ilgili kod dosyalarıdır. Visual Studio, projelere dahil edilen her form için 3 ayrı dosya hazırlamaktadır. Asıl kod dosyaları yani programcının yazdığı kodlar form ile aynı ada sahip CS uzantılı dosyada saklanmaktadır. Formun görsel yapısı ile ilgili bilgiler ise Designer.cs dosyasında tutulmaktadır. Designer.cs dosyasının içeriği genellikle Visual Studio tarafından oluşturulduğu için programcılar pek ilgilenmezler.

88 88 Memik Yanık - Visual C# a Başlangıç Kitabı Visual Studio, formlara ait Designer.cs dosyasındaki kodları bir bakıma tasarım anında yorumlayıp söz konusu form çalışma anında ekrana geldiğinde nasıl bir görünüme sahip olacağı konusunda programcıyı önceden yani tasarım anında bilgilendirmektedir. Formun üzerine nesne yerleştirilmesi veya formun özelliklerinde değişiklik yapılması halinde Visual Studio tarafından geri planda Designer.cs dosyasında değişiklik yapılır. Başka bir deyişle formların ve formalara yerleştirilen nesnelerin görsel özellikleriyle ilgili satırlar FormAdı.Designer.cs dosyasında bulunmaktadır. Tabii bu C# derleyicisi için şart değildir. Çünkü bu ayrım Visual Studio nun tercihidir. Projelerdeki her form için cs ve resx uzantılı 3 dosya hazırlanmaktadır. Not Defteri ile CS uzantılı dosyaları açıp inceleyebilir veya değiştirebilirsiniz. Aşağıda verilen ekran görüntüsünü Form1 e ait CS dosyasını Not Defteri ile açtıktan sonra aldım.

89 Memik Yanık C# a Başlangıç Kitabı 89.NET Framework ile gelen Form sınıfının mirasçısı sınıfları kendiniz kod yazarak hazırlayabilirsiniz ancak bu durumda Visual Studio penceresi içinde formların görsel yapısının görüntülenmesinde sorunlar yaşanır. C# projeleri hard diske csproj uzantısı ile kaydedilmektedir. csproj uzantılı proje dosyalarında projedeki form ve class lar hakkında bilgi bulunmaktadır. csproj uzantılı dosyanın içeriğine bakıp projede kaç form ve class ın olduğunu öğrenebilirsiniz. Đleri ki sayfalarda değinileceği gibi Visual Studio ile yeni bir proje hazırlandığı zaman ayrıca sln uzantılı bir Solution dosyası hazırlanıyor. Visual Studio ile hazırlanan C# projelerinde yukarıda sözü edilen dosyalara ek olarak Properties adı altında gruplanan 5 dosya daha bulunmaktadır. Bu 5 dosya sayesinde projenin özellikleri ayarlanmaktadır. Örneğin uygulama dahilinde kullanılan resim dosyaları Resources.resx dosyasına dahil edilebilmektedir. Bu 5 dosya projeye ait klasörün içinde Properties klasöründe saklanmaktadır.

90 90 Memik Yanık - Visual C# a Başlangıç Kitabı Üzerinde çalıştığınız projenin başka bilgisayarlarda kullanılmak veya çalıştırılmak üzere alınan/götürülen dosyaların hepsine birden Assembly denilmektedir. Assembly tek exe dosyadan meydana gelebileceği gibi çok sayıda resim, text vb. dosyasından da oluşabilir. Assembly hakkındaki bilgiler Properties klasöründe tutulan AssemblyInfo.cs dosyasında tutulmaktadır. Bu dosyanın içeriği Project Properties penceresinden ulaşılan Assembly Information diyalog kutusunda yapılan ayarlardan etkilenmektedir. Bana sorarsanız henüz yolun başında olanların Assembly nedir ne işe yarar gibi sorularla ilgilenmelerine gerek yoktur. Yukarıdaki sayfalarda ekran görüntüsü verilen New Project diyalog kutusunda değişik amaçlar için kullanabileceğiniz çok sayıda şablon listelenmektedir. Bu kitapta bu şablonların birkaçından söz edilecektir. Örneğin Empty Project şablonu herhangi bir forma ve Program.cs dosyasına sahip olmayan bir proje hazırlamaktadır. Visual Studio veya Express Edition ile hazırlanan projeler hakkında bilgi sahibi olmanız için New Project diyalog kutusunu ekrana getirip Empty Project şablonu ile bir proje hazırlayıp kaydettim. Aşağıda verilen ekran görüntüsünden tespit edeceğiniz gibi Solution Explorer penceresinde herhangi bir klasör veya dosya listelenmiyor.

91 Memik Yanık C# a Başlangıç Kitabı 91 Bu şartlarda projenin kaydedildiği klasöre bakacak olursanız sadece solution ve proje dosyalarının hazırlandığını görebilirsiniz. Daha sonra bu proje için Main() metodunu içeren "Program.cs" dosyasını ve başlangıç formunu hazırlayabilirsiniz. Solution Hazırlamak Yukarıdaki sayfalarda Solution Explorer penceresiyle ilgili olarak verilen bazı ekran görüntülerinde Solution varken bazılarında yoktu. Üzerinde çalıştığınız Solution tek projeden meydana geliyorsa Solution Explorer penceresinde Solution adının yer almasına gerek duymayabilirsiniz. Bu durumda Tools menüsündeki Options komutu ile ekrana getirilen diyalog kutusunda Project and Solutions seçenek grubunda ayarlama yapmalısınız. Bu diyalog kutusunda Always show solution onay kutusunu pasif duruma getirirseniz Solution Explorer penceresinde Solution adı listelenmez. Yukarıda belirtildiği gibi Visual Studio ile yeni bir proje hazırladığınızda ayrıca bir Solution hazırlanmaktadır. Bu konuda adım adım bilgi vermek için Visual Studio nun File menüsünden komut verip New Project diyalog kutusunu ekrana getirdim.

92 92 Memik Yanık - Visual C# a Başlangıç Kitabı Visual Studio, projeye verilen adı aynı zamanda Solution adı olarak kullanmaktadır. Karışıklık olmasın diye proje adı ile Solution adının farklı olmasını sağladım. Bu şartlarda OK düğmesi tıklanırsa kullandığım bilgisayardaki C:\Projeler klasöründe Solution1 adında bir klasör hazırlanıp solution a ait SLN uzantılı dosya bu klasöre konulur. Ayrıca bu klasörün içinde proje için WindowsApplication1 adında bir klasör hazırlanıp projeye ait dosya ve diğer klasörler bu klasörün içine konulur. Bildiğiniz gibi New Project diyalog kutusundaki Create directory for solution onay kutusu seçili değilken solution için ayrı bir klasör hazırlanmayıp proje ve solution dosyaları bir arada tutulmaktadır. Tekrar etmek gerekirse Visual Studio ile bir C# projesi hazırladığınızda otomatik olarak SLN uzantılı bir solution dosyası hazırlanmaktadır. Solution lar projeleri gruplamaya yaradıkları için geliştirdiğiniz uygulama birden fazla projeden meydana gelmeyecekse SLN uzantılı Solution dosyasını unutabilirsiniz.

93 Memik Yanık C# a Başlangıç Kitabı 93 Otomatik olarak hazırlanan Solution u görmek istiyorsanız Solution Explorer penceresine bakabilirsiniz. Birden fazla proje söz konusu olmadığı sürece otomatik olarak hazırlanan Solution işlevsel değildir. Başka bir deyişle aynı anda birden fazla projeyi açmayı düşünmüyorsanız Solution larla ilgilenmenize gerek yoktur. Visual Studio tarafından hazırlanan Solution a ait kısayol menüsündeki New Project komutu ile yeni bir projeyi veya Existing Project komutu ile mevcut projelerden birisini Solution a dahil edebilirsiniz. Kısayol menüsünden New Project komutunu verirseniz ekrana Add New Project diyalog kutusu gelir. Tahmin edebileceğiniz gibi Solution larda.net destekli ve Microsoft ürünü herhangi bir programlama dili ile hazırlanmış başka projeler olabilmektedir. Konumuz C# olduğu için Project Types kutusunda Visual C# Projects ve Templates liste kutusunda ise Windows Application i seçip OK düğmesini tıklayınca Solution Explorer penceresi aşağıda verilen şekle dönüştü. Solution da birden fazla proje varken bu projelerden birisi aktif projedir. Aktif projenin adı Solution Explorer penceresinde kalın olarak yazılmaktadır. Yanda verilen ekran görüntüsünü aldığım sırada WindowsApplication1 adlı proje aktifti. Diğer projeyi aktif proje yapmak istiyorsanız o projeye ait kısayol menüsünden Set as StartUp Project komutunu vermelisiniz. Solution daki projelerden birisini çıkarmak istiyorsanız o projeye ait kısayol menüsünden Remove komutunu verebilirsiniz. Yukarıda otomatik olarak hazırlanan Solution a sonradan 2. bir projeyi dahil ettim. Ancak işe boş bir Solution hazırlamakla başlayabilirsiniz. Đçeriği boş solution hazırlamak istiyorsanız New Project diyalog kutusundaki Blank Solution şablonundan yararlanabilirsiniz.

94 94 Memik Yanık - Visual C# a Başlangıç Kitabı Herhangi bir proje içermeyen yeni bir Solution hazırlamak için Project Types liste kutusunda Visual Studio Solutions ve Templates kutusunda ise Blank Solution şablonunu seçip solution için klasör seçip OK düğmesini tıklarsanız aşağıdaki gibi Visual Studio penceresi ile karşılaşırsınız. Bu sırada Solution a dahil edilmiş olan herhangi bir proje olmadığı için Solution Explorer penceresinde yalnızca Solution adı listelenir. Bu sırada mevcut projelerden birisini Solution a dahil edebilir veya Solution için yeni bir proje hazırlayabilirsiniz. Bu işlemler için Solution Explorer penceresinde Solution a ait kısayol menüsünden New Project veya Existing Project komutlarından birisini verebilirsiniz. Herhangi bir zamanda SLN uzantılı Solution dosyasını açmanız halinde Solution a dahil edilmiş olan bütün projeler açılır. Projeleri Çalıştırmak Ve Derlemek Şimdi sırada yukarıdaki sayfalarda anlatılan şekilde hazırlanan projeleri çalıştırmak, test etmek ve derlemek var. Bu düşünce ile New Project diyalog kutusunu ekrana getirip Windows Forms Application şablonu ile Proje1 adında bir proje hazırlayıp bu projeyi C: sürücüsünde \Proje1 klasörüne kaydettim. Projeyi kaydettiğim klasörü özellikle işaret ettim. Çünkü proje çalıştırıldığında veya derlendiğinde geri planda Visual Studio tarafından hazırlanan dosyalardan söz etmek istiyorum. Ayrıca New Project diyalog kutusunda Create directory for solution onay kutusu pasif duruma getirip proje hazırlanırken otomatik olarak hazırlanan Solution la ilgili dosyanın ayrı bir klasöre konulmasını engelledim. Program geliştirme aracı yani IDE olarak Visual Studio yerine C# için hazırlanmış Express Edition ı kullananlar için şunu söylemek isterim: Projeleri çalıştırmak bağlamında Visual Studio ile Express Edition birbirinden pek farklı değildir.

95 Memik Yanık C# a Başlangıç Kitabı 95 Şimdi hazırladığım projede herhangi bir değişiklik yapmadan, başlangıç formuna kontrol yerleştirmeden ve başka bir Class hazırlamadan çalıştıracağım. Projeleri çalıştırmak, başka bir deyişle projeyi test edip hata içerip içermediğini kontrol etmek için genellikle Debug menüsündeki Start Debugging komutu kullanılmaktadır. Genellikle dedim; çünkü projeleri çalıştırmanın başka yöntemleri de vardır. Çalışır durumdaki projeye ait ilk formu Kapat düğmesi ile kapatıp projenin çalışmasını sona erdirip tasarım moduna geçebilirsiniz. Projenin çalışmasını sona erdirip Design moduna geçilirse Visual Studio nun Toolbox ve Properties gibi pencereler tekrar görüntülenir. Visual Studio ile hazırlanan C# projeleri Debug menüsünden komut verilerek çalıştırıldıkları, başka bir deyişle test edildikleri zaman Visual Studio tarafından otomatik olarak EXE dosya hazırlanmaktadır. Proje çalıştırıldığında hazırlanan EXE dosyanın yerini aşağıda görebilirsiniz. Bu EXE dosya ancak proje hazırlanırken tercih edilen.net Framework sürümünün(2.0, 3.0 veya 3.5) kurulu olduğu bilgisayarda çalışabilir. Aşağıda ekran görüntüsü verilen dosya listesindeki pdb uzantılı dosyaya dikkatinizi çekmek istiyorum. Kodun debug edilmesi yani hatalardan ayıklanması işlemiyle ilgili bilgiler bu dosyaya yazılmaktadır. Tabii bu bölümde hata ayıklama işlemleri üzerinde durmayacağımız için pdb uzantılı dosyanın işlevinden söz edilmeyecektir.

96 96 Memik Yanık - Visual C# a Başlangıç Kitabı Yukarıda söylendiği gibi Visual Studio ile hazırladığınız C# projesini çalıştırıp test etmek için Debug menüsünden Start Debugging komutunu verebilir veya direk F5 tuşuna basabilirsiniz. Aslında Debug menüsünden bu komutu vermekle Visual Studio ya bir bakıma hazırladığım projeyi entegre hata ayıklayıcının nezaretinde test etmek istiyorum ve varsa hatalarından ayıklamak istiyorum demiş oluyorsunuz. Üzerinde çalıştığınız projeyi Ctrl+F5 tuşları ile çalıştırırsanız projeyi entegre Debugger dan bağımsız çalıştırmış olursunuz. En başında belirtmek gerekir ki Start Debugging komutu verildiği zaman proje için otomatik olarak hazırlanan EXE dosya başkalarına verilecek, başla bir deyişle projeden yararlanacaklara verilecek EXE kopya değildir. Elbette Start Debugging komutu sayesinde otomatik olarak hazırlanıp projeye ait klasörün içinde yer alan \Bin\Debug klasörüne yerleştirilen EXE dosyayı alıp başka bilgisayarda çalıştırmak mümkündür. Ancak debug modunda iken hazırlanan EXE dosyanın dağıtılması önerilmiyor. Şimdi gelelim şu Debug moduna. Programcılar genelde uygulamalarını geliştirmeyi ve test etmeyi Debug modunda yaparlar. Ne zaman ki uygulama tamamlanıp testlerden geçer o zaman Release sürümü hazırlayıp kullanıcılara öyle verirler. Yukarıdaki sayfalarda işaret edildiği gibi Visual Studio ile yeni C# projesi hazırlanıp kaydedildiği zaman projeye ait klasörün içinde Bin ve Obj adında 2 klasör hazırlanmaktadır. Derleme sırasında hazırlanan geçici dosyalar Obj klasörüne konulmaktadır. Obj klasörünün altında Debug ve Release adında 2 klasör hazırlanmaktadır. Aynı şekilde Bin klasörünün içinde yine Debug ve Release adında 2 klasör hazırlanmaktadır. Uygulamanın Debug sürümü Bin klasörünün içinde bulunan \Bin\Debug klasörüne konulurken Release sürümü \Bin\Release klasörüne yerleştirilmektedir. Yukarıda belirtildiği gibi Visual Studio ile bir Windows Forms Application hazırlayıp bu uygulamayı kaydedip sonrada Debug menüsünden Start Debugging komutunu verdiğinizde Visual Studio söz konusu uygulamayı

97 Memik Yanık C# a Başlangıç Kitabı 97 önce derlemektedir. Tabi Visual Studio bu işlemi yaparken.net Framework ile gelen C# derleyicisini kullanmaktadır. Derleme işlemi sırasında hazırlanan dosyalar \uygulama\obj\debug klasörüne yerleştirilmektedir. Start Debugging komutu verildiği zaman Visual Studio derleme yapıp bu dosyaları hazırladıktan sonra ayrıca uygulama\bin\debug klasörüne kodun EXE sini ve birkaç dosya daha yerleştirilip bu EXE dosya çalıştırılmaktadır. Hazırladığınız proje veya Solution ı çalıştırıp test etmek yerine derlemek istiyorsanız Build menüsündeki komutlardan yararlanmanız gerekir. Build menüsünde gerçekte aşağıda verilen ekran görüntüsündekinden daha fazla komut bulunmaktadır. Başlangıçta Solution ların derlemesiyle ilgili komutlar Build menüsünde yer almıyor. Eğer birden fazla projeyi bir Solution da topluyorsanız Tools menüsünden komut verip ekrana Options diyalog kutusunu getirip Project And Solutions sekmesinde ayarlama yapabilirsiniz.

98 98 Memik Yanık - Visual C# a Başlangıç Kitabı Bu menüdeki komutların adlarına üzerinde çalışılan projenin adı eklenmektedir. Bu sırada üzerinde çalıştığım projenin Proje1 di. Üzerinde çalıştığınız projeyi derlemek üzere Build menüsünden Build komutunu verirseniz Visual Studio projenizi derler. Derleme sırasında önce Uygulama adı\obj\debug klasörüne bazı dosyalar yerleştirilir. Derleme işleminin ikinci aşamasında birisi EXE olmak üzere birkaç dosya hazırlanıp Uygulama adı\bin\debug klasörüne yerleştirilir. EXE dosyayı çift tıklayıp veya Başlat menüsünden Çalıştır komutunu verip projenizi çalıştırabilirsiniz. Tabii profesyonel programcılar projeleri için kurma CD si hazırlayıp uygulamalarını öyle dağıtırlar. Kurma CD sini Visual Studio ile gelen Setup Wizard dan yararlanarak hazırlayabilirsiniz. Derleme sonucu hazırlanıp \Obj\Debug ve \Bin\Debug klasörlerine yerleştirilen dosyaları silmek istiyorsanız Build menüsünden Clean komutunu vermelisiniz. Daha önce derlediğiniz projeyi Build komutu ile tekrar derlediğinizde projenin yalnızca değişen kısımları gözetilir. Rebuild komutu ise projeyi sanki ilk kez derleniyormuş gibi yeni baştan derler. Debug modundan Release moduna geçmek istiyorsanız Visual Studio nun Debug menüsünden komut verip Cunfiguration Manager diyalog kutusunu ekrana getirmelisiniz. Başlangıçta bu komut Debug menüsünde yer almıyor ve bu nedenle Tools menüsündeki Options komutu ile ekrana getirilen diyalog kutusunda ayarlama yapmak gerekmektedir.

99 Memik Yanık C# a Başlangıç Kitabı 99 Options diyalog kutusunda Project and Solution seçenek grubundaki Show advanced build configurations onay kutusunu seçmelisiniz. Bu ayarlamayı yapıp Debug menüsünde Cunfiguration Manager komutunun yer almasını sağlayıp bu komutu verdiğinizde akrana aşağıda verilen diyalog kutusu gelir. Bu ekran görüntüsünü aldığım sırada üzerinde çalıştığım projenin dahil olduğu Solution bir tek projeye sahipti. Bu sırada Solution da birden fazla

100 100 Memik Yanık - Visual C# a Başlangıç Kitabı proje olsaydı bu projeler de listelenirdi. Bu diyalog kutusundaki Active Solution configuration ve Active solution platform liste kutularında yapılan seçimlerden bütün projeler etkilenmektedir. Active Solution configuration liste kutusunu açıp Release i seçerseniz Debug modundan Release moduna geçmiş olursunuz. Bu andan itibaren Debug menüsünden Start Debugging komutunu verip projeyi çalıştırırsanız EXE kodun Release sürümü hazırlanır ve bu EXE dosya \Bin\Release klasörüne yerleştirilir. Bu sırada yani Release modunda iken Build menüsünden Clean komutunu verirseniz \Obj\Release ve \Bin\Release klasörlerine yerleştirilmiş dosyalar silinir. Debug modunda iken Build menüsünden Build veya Rebuild komutu verilerek derleme yapıldığında derleme sonucu hazırlanan dosyalar yine \Obj\Release ve \Bin\Release klasörlerine yerleştirilmektedir. Hangi modda olduğunuzu öğrenirken Project Properties penceresinden yararlanabilirsiniz. Bu dersi baştan sonra inceleyenlerin tespit etmiş olabileceği gibi bazı küçük ayrıntılar hariç burada anlatılan işlemlerin hemen hepsini başka kaynaklarda bulmak mümkündür. Hatta daha önce eski Visual Basic ve Delphi IDE sini az çok kullanmış olanların kaynak karıştırmalarına bile gerek kalmadan bu metinde anlatılanları kendilerinin zaten biliyor olmaları uzak bir ihtimal değildir. Buna rağmen yarın bir gün sırf bu metni kaleme aldım diye yargılanmamak, sanık pozisyonunda hakim karşısına çıkmamak için ek açıklama yapma gereğini duyuyorum: Ey yetkililer, ey yerli programcılık kitabı yazarları; 1994 yılından bu yana Microsoft un IDE lerini kullanan programlama dilleri üzerine çok sayıda kitap yazmış birisi olarak yukarıdaki sayfalarda yazdıklarımı gidip bozuk cümlelerle dolu yerli programcılık kitaplarından öğrenmemin bir mantığı var mıdır? Yani yukarıda verilen bilgilerin daha önce yayınlana bazı programcılık kitaplarında yer alıyor olması bence Visual Studio nun suçudur. Keşke Visual Studio at sahibine göre kişner atasözünü kendisine rehber edip yazarına ve programcısına göre çalışsa, yazarına göre işlem yapsa

101 6. BÖLÜM WINDOWS FORMS UYGULAMALARI Daha önceki derslerde önde C# için hazırlanmış Express Edition sonra da Visual Studio hakkında ön bilgi verdik. Bu derste ise Express Edition ile Windows Forms hazırlayacağız. Bu derste yazılanlar itibarı ile Express Edition kullanmak ile Visual Studio kullanmak arasında pek bir fark yoktur. Başka bir deyişle bilgisayarlarına Visual Studio kurmuş olanlar bu derste yazılanları zorluk çekmeden uygulayabilirler. Đlk derslerinde konsol uygulaması hazırlamamızın nedeni C# uygulamaları hakkında adım adım bilgi vermekti. Yoksa konsol uygulamalarına çok özel durumlarda ihtiyaç duyulmaktadır. Bu nedenle bundan sonra Windows Forms denilen normal uygulamalara odaklanacağız. Bu nedenle Express Edition ı başlatıp File menüsünden komut verip New Project diyalog kutusunu ekrana getirip Windows Application şablonunu seçtim. C# için hazırlanan Express Edition ile hazırlanan projelerde New Project diyalog kutusunda projeye verilen ad sonradan değiştirilebilmektedir. Projeye vermek istediğim adı Name kutusuna yazıp OK düğmesini tıklayınca aşağıdaki gibi bir Visual C# 2008 Express Edition penceresi ile karşılaştım.

102 102 Memik Yanık - Visual C# a Başlangıç Kitabı Windows Application şablonu ile hazırlanan projeye bir form dahil edilmekte ve bu formun görsel yapısı Express Edition penceresine getirilmektedir. Bu formun üzerine hemen düğmeler, TextBox lar ve ListBox lar yerleştirmek yerine Windows Forms Application şablonu ile hazırlanan projenin özelliklerine bir bakalım. Bu amaçla Solution Explorer penceresini açtım. Express Edition ile C# projesi hazırlandığı zaman çok kullanılan bazı sınıfları içeren referanslar yani DLL dosyaları projeye dahil edilmektedir. Daha doğrusu Express Edition a bazı referanslardaki sınıflardan yararlanılmak istendiği söylenmektedir. Hatırlarsanız yukarıdaki sayfalarda konsol uygulaması dahilinde ekrana form veya pencere getirmek için System.Windows.Forms deki Form adlı sınıftan yararlanmıştık.

103 Memik Yanık C# a Başlangıç Kitabı 103 Üzerinde çalışılan projede.net Framework ile gelen sınıflardan birisinden yararlanmak için o sınıfın yer aldığı namespace i içeren DLL dosyasının veya referansın Solution Explorer penceresinde listelenmesi gerektiği için Solution Explorer penceresinden yararlanıp Add Reference diyalog kutusunu ekrana getirmiştik. Benzer durum Express Edition ile hazırlanan Windows Forms uygulamaları için de geçerlidir. Express Edition en çok gerek duyulan referansları kendiliğinden Solution Explorer penceresinde listelemektedir. Üzerinde çalışılan proje hakkında bilgi edinilmek istendiği zaman başvurulan Solution Explorer penceresine dikkatlice bakarsanız projedeki formla ilgili olarak 3 dosyanın hazırlanmış olduğunu görürsünüz. Burada dikkatinizi öncelikle Program.cs dosyasına çekmek istiyorum. Yukarıdaki sayfalarda işaret edildiği C# projelerinin başlangıç noktası Main() metodudur. Express Edition veya Visual Studio ile hazırlanan projelerde Main() metodu Program.cs adlı kod dosyasına konulduğu için bu dosya önemlidir. Solution Explorer penceresinde Program.cs dosyasını çift tıklarsanız bu kod dosyasının içeriği görüntülenir. Hemen belirtmek gerekir ki Main() metodunun Program.cs dosyasında olması şart değildir. Microsoft firması Main() metodunun Program.cs dosyasında olmasını tercih ettiği için bu tercihe bağlı kalmanız önerilir.

104 104 Memik Yanık - Visual C# a Başlangıç Kitabı Express Edition tarafından hazırlanan bu kodu dikkatlice incelerseniz System, System.Collections.Generic, System.Windows.Forms gibi namespace lerdeki sınıfları direk kullanabilmeniz, yani sınıf adından önce namespace adını yazmak zorunda kalmamanız için using deyimi ile ayarlama yapılmış olduğunu görürsünüz. Program.cs dosyasındaki Main() metodundaki son satırı yukarıdaki sayfalarda görmüştük. Application.Run(new Form1()); Windows Forms uygulamalarında System.Windows.Forms deki sınıfları direk kullanabilmeniz için Express Edition tarafından using deyimi ile ayarlama yapıldığı için sınıf adından önce namespace adı yazılmamış. Bu satırı daha önce görmüş olanlar şöyle bir açıklamayı okumuş olabilirler: Uygulama Run() metodu ile başlatılmaktadır. Aslında bu tek cümlelik tanım yanlış değildir. Ne var ki bu tanım bu satırla nelerin yapıldığını, geri planda nelerin geliştiğini açıklamaya yetmiyor. Konunun devamında anlatılacağı gibi Express Edition ile Windows Forms uygulaması hazırlandığında System.Windows.Forms adlı namespace teki Form adlı Class ın mirasçısı Form1 adında bir Class hazırlanmaktadır. Đşte bu satırda Form1 adlı Class ın örneği alınıp Application sınıfının Run() metoduna parametre olarak verilmektedir. Konu üzerinde düşünmenizi sağlamak için Windows Forms uygulamasının Program.cs dosyasındaki Main() metodunu aşağıdaki gibi düzenledim. static void Main() string mesaj = "Proje başlatıldı, Form1 ekrana getirilecek"; MessageBox.Show(mesaj); Application.Run(new Form1()); Express Edition tarafından hazırlanan Main() metodundan sildiğim 2 satır mutlaka gerekli olan satırlar değildir. Kod kısalsın diye sildim. Main() metodunun bu halinde önce string tipte bir değişken tanımlayıp bilgi aktardım. Değişken tanımlama ile tanımlanan değişkene bilgi aktarma işlemini ayrı satırlarda yapabilirdim. Đleri de yerli bir yazarın Memik Yanık değişkenimizin adını çalmış suçlamasından kendimi kurtarmak için bu kodu bir de aşağıdaki gibi düzenledim. static void Main() string msg = "Proje başlatıldı, Form1 ekrana getirilecek"; MessageBox.Show(msg); Application.Run(new Form1());

105 Memik Yanık C# a Başlangıç Kitabı 105 Bu şekilde String tipteki değişkeni tanımlayıp bilgi aktardıktan sonra.net Framework ile gelen MessageBox sınıfının Show() metodu ile bu değişkenin içeriğini bir diyalog kutusu içinde ekrana getirdim. Dolayısıyla Main() metodu bu şekilde düzenlenen proje çalıştırıldığı zaman ekrana önce aşağıdaki gibi bir diyalog kutusu gelir. Bu diyalog kutusu kapatıldığında ise sıra Application sınıfının Run() metodunun kullanıldığı satıra gelir ve ekrana projenin formu gelir. Run() metodunun kullanıldığı satırı incelerseniz Form1 sınıfının örneğinin new anahtar kelimesi kullanılarak parantezlerin içine alındığını görürsünüz. Bir sınıfın örneğini alma yani nesne hazırlama işleminin anlaşılmasına katkı olması için bu projenin Main() metodunu aşağıdaki gibi düzenledim. static void Main() string msg = "Proje başlatıldı, Form1 ekrana getirilecek"; MessageBox.Show(msg); Form1 Baslangic_formu; Baslangic_formu = new Form1(); Baslangic_formu.Text = "İlk Form"; Application.Run(Baslangic_formu); Şimdi gelin bu 6 satırlık kodu yorumlayalım. Express Edition veya Visual Studio ile Windows Forms uygulaması hazırlandığı zaman.net Framework ile gelen ve System.Windows.Forms de yer alan Form sınıfının mirasçısı Form1 adında bir sınıf hazırlanmakta ve bu sınıfla ilgili Form1.cs ve Form1.Designer.cs adında 2 kod dosyası hazırlanmaktadır. Burada yani bu Main() metodunda yaptığım, önce Express Edition tarafından Windows Forms uygulaması için otomatik olarak hazırlanan Form1 tipinde(sınıf) bir değişken tanımlamak, sonra bu sınıfın örneğini new anahtar kelimesi ile hazırlayıp(nesne hazırlamak) tanımladığım değişkene aktarmaktır. En son satırda ise Form1 tipindeki nesneyi Application sınıfının Run() metoduna parametre olarak verdim. Ne zaman ki Application sınıfının Run() metoduna parametre olarak verilen form kapatılır o zaman projenin çalışması sona ermiş olur.

106 106 Memik Yanık - Visual C# a Başlangıç Kitabı Formlar Đçin Hazırlanan Kodlar Express Edition veya Visual Studio ile yeni bir proje hazırlandığında projeye Form1 adında bir formun dahil edildiğini biliyorsunuz. Formu oluşturan kodları görüntülemek için Solution Explorer penceresinde söz konusu form seçili iken View menüsünden Code komutunu verebilirsiniz. Aşağıdaki ekran görüntüsünü incelediğinizde projedeki her form için hazırlanan CS dosyalarının ilkinde en başta kullanılması muhtemel sınıfların yer aldığı namespace ler işaret edilmektedir. Ardından form ile aynı ada sahip bir Class hazırlanmaktadır. Bu class System.Windows.Forms adlı namespace teki Form adlı Class ın mirasçısı olduğu için çok sayıda özellik ve metoda sahip olur. Bu koda dikkat ederseniz önce namespace bloğu bulunmaktadır ve projenin adı namespace adı olarak kullanılmaktadır. Devamında public ve partial olarak işaret edilen class bloğu gelmektedir. Hazırlanan Class a Form1 adı verilmiş. Hazırlanmak istenen Class ın adından sonra mirasçı(bu sınıfa bazı programcılar ana sınıf-base class diyorlar) pozisyonundaki Form sınıfının adı yazılmış. Hazırlanmak istenen Class ile mirasçı Class ın adını birbirinden ayırmak için : kullanılmaktadır. Form sınıfı System.Windows.Forms de yer aldığı ve bu namespace using bloğunda işaret edildiği için Form sınıfının adının önüne namespace adı yazılmaya gerek duyulmamış. Devamında Form1 sınıfının yapıcı metoduna yer verilmiş. Class ile aynı ada sahip metotlara yapıcı veya constructor metot adı verilmektedir. Form1 adı verilen Class ın yapıcı metodunda yalnızca InitializeComponent() metodu işletilmektedir. Form1 sınıfıyla ilgili

107 Memik Yanık C# a Başlangıç Kitabı 107 InitializeComponent metodu Form1.Designer.cs adlı ikinci kod dosyasında yer almaktadır. Formların ve formların üzerine yerleştirilen nesnelerin özellikleri Form1.Designer.cs dosyasında ayarlanmaktadır. Designer.cs dosyasında da Form1 adında bir Class bulunmaktadır. Başka bir deyişle Form1 adlı Class ın bir kısmı Form1.cs de diğer kısmı Form1.Designer.cs dosyasında bulunmaktadır. 7 Class ların birden fazla kod dosyası veya parça şeklinde düzenlenmesine Partial Class denilmektedir. Bu nedenle Form1.cs veya Form1.Designer.cs dosyalarındaki partial anahtar kelimeleri silinirse hata meydana gelir. Form1 adlı Class için Visual Studio tarafından hazırlanan Form1.Designer.cs dosyasına bakarsanız Dispose() adında bir metodun olduğunu görürsünüz. Bu metot, sınıfla ilgili olarak hazırlanan nesnelerin zamanı gelince bellekten silmesiyle ilgilidir. Şimdi Form1 için Visual Studio tarafından hazırlanan satırları ve bu satırlarda kullanılan metot ve anahtar kelimelerin bazılarından söz edeceğim. Visual Studio her form için Form1.Designer.cs dosyasında yukarıda verilen satırlardan daha fazlasını hazırlamaktadır. Tasarım anında Properties penceresinde yapılan değişiklilere programcı doğrudan müdahale etmeyi tercih etmeyeceği için bu satırlar Windows Form Designer generated code adlı altında gruplanıp gizlenmektedir. Aşağıda verilen kodda bu bölgeye yazılan satırları görebilirsiniz.

108 108 Memik Yanık - Visual C# a Başlangıç Kitabı namespace Project1 partial class Form1 private System.ComponentModel.IContainer components=null; protected override void Dispose(bool disposing) if (disposing && (components!= null)) components.dispose(); base.dispose(disposing); private void InitializeComponent() this.components = new System.ComponentModel.Container(); this.autoscalemode = System.Windows.Forms.AutoScaleMode.Font; this.text = "Form1"; IntializeComponent() metodundaki satırlar Toolbox tan yararlanılarak formun üzerine yerleştirilen nesnelere göre artabilmektedir. Bu sırada Toolbox tan yararlanıp forma nesne yerleştirir veya Properties penceresinden yararlanıp formun özelliklerini değiştirseniz Windows Form Designer generated code bölgesine yeni satırlar eklenir veya mevcut satırlarda değişiklik meydana gelir. Formlara Nesne Yerleştirmek Yukarıdaki sayfalarda Express Edition veya Visual Studio ile hazırlanan C# projeleri hakkında biraz bilgi sahibi olduktan sonra şimdi sırada forma button nesnesi yani düğme yerleştirmek var. Tabii bazılarınız hemen bunu bilmeyecek ne var diye sorabilirler. Siz yine de okumaya devam edin. Formlara nesne yerleştirip bunlar için kod yazabilmek için yeni bir proje hazırladım ve projenin ilk(aynı zamanda başlangıç) formuna button nesnesi yerleştirebilmek için Toolbox ı açtım.

109 Memik Yanık C# a Başlangıç Kitabı 109 Toolbox ta listelenen seçeneklere Component adı verilmektedir. Bu seçeneklere kontrol da denilebilir. Bu kontroller gerçekte.net Framework ile birlikte gelen birer Class tır. Express Edition formlara yerleştirilebilinen class ların örneklerini alıp kullanmanız konusunda size yardımcı olmaktadır. Daha açık bir anlatımla Toolbox tan Button adlı kontrolü seçip formu tıklarsanız Button sınıfından yola çıkıp button1 adında bir nesne hazırlamış olursunuz. Forma bu şekilde button1 adında bir Button nesnesi yerleştirince Express Edition bizim için gidip bu formun Form1.Designer.cs adlı kod dosyasına bazı satırlar ekledi. Bu satırların sayesinde button1 nesnesi formun üzerinde görünmeye başladı. Başka bir anlatımla, forma Button nesnesi yerleştirmekle biz gerçekte Express Edition a diyoruz ki formun üzerinde şu özelliklere sahip bir düğmenin olması için git Form1.Designer.cs dosyasında bazı ayarlamalar yap, button nesnesi hazırlayan satırlar ekle. Şimdi gidip bakalım Express Edition bizim için projedeki ilk formun Form1.Designer.cs dosyasına neler yazmış? Form1.Designer.cs dosyasında aşağıda verilen ekran görüntüsünde görülenlerden daha fazla satır olmasına rağmen ekran görüntüsü küçük olsun diye yalnızca button1 nesnesiyle ilgili satırların görünmesine izin verdim.

110 110 Memik Yanık - Visual C# a Başlangıç Kitabı Toolbox tan yararlanıp forma button nesnesi yerleştirildiği zaman Express Edition(aynı şeyler Visual Studio içinde söylenebilir) ilk olarak button1 adında ve System.Windows.Forms.Button tipinde bir değişken tanımlıyor. Bu sırada forma 2. bir button nesnesi yerleştirmeniz halinde Express Edition buna button2 adını verir. Tabi forma yerleştirmiş olduğunuz nesnelere sonradan istediğiniz adı verebilirsiniz. Siz siz olun bu nesnelere aktar gibi yerli yazarlar tarafından sık kullanılan adlar vermeyin. Bakarsınız yarın bir gün yerli yazarın birisi düğme adımı çalmışsınız diye sizden şikayetçi olur. Bu nedenle düğmelere argo isimler vermeniz önerilir. Express Edition veya Visual Studio, System.Windows.Forms.Button tipindeki değişkeni tanımladıktan sonra form için daha önce hazırlanan InitializeComponent() adlı metotta önce new anahtar kelimesi ile button nesnesi hazırlıyor. Devamında bu nesnenin Name, Location, Size, Text gibi birkaç özelliğini ayarlıyor. Bu sırada Form1.Designer.cs dosyasından button nesnesi ile ilgili satırları silerseniz button nesnesini formun üzerinden kaldırmış olursunuz. Çünkü formun üzerinde button nesnesinin olmasına neden olan satırlar bunlardır. Bu satırlarla oynayıp button nesnesinin özelliklerinde değişiklik yapabilirsiniz. Formların ve forma yerleştirilen nesnelerin özelliklerini fare ile ayarlamak daha kolay olduğu için programcılar çok gerekmedikçe nesnelerin özelliklerini ayarlamak için Designer.cs dosyasına başvurmazlar. Forma düğme yerleştirmenin geri planında nelerin olduğu konusunda biraz bilgi sahibi olduktan sonra şimdi button1 adlı düğmenin başlık metnini yani Text özelliğini değiştireceğim. Bu amaçla Form1.cs(Design) sekmesini tıklayıp Express Edition penceresi içinde Form1.Designer.cs adlı kod dosyası yerine Form1 in görsel yapısının görüntülenmesini sağladım.

111 Memik Yanık C# a Başlangıç Kitabı 111 Formların ve forma yerleştirilen nesnelerin özelliklerini ayarlarken Properties penceresinden yararlanılmaktadır. Properties penceresini görüntülemek için View menüsünden komut vermek gerekmektedir. Aşağıda verdiğim ekran görüntüsünü button1 nesnesinin Text özelliğini değiştirdikten sonra aldım. Aslında button1 adlı nesnenin Text özelliğini bu şekilde değiştirmekle risk almış oldum. Çünkü yarın bir gün yerli bir yazar ortaya çıkıp Göster i benim kitaptan çalmışsın diye beni dava edebilir. Properties penceresinde button1 adlı nesnenin Text özelliğinde değişiklik yapılırsa Express Edition bu değişikliği anında Form1.Designer.cs dosyasına yansıtır. Bu button nesnesinin adını değiştirmek istemiş olsaydım Properties penceresinde Name özelliğinde değişiklik yapardım. Şimdi öyle bir ayarlama yapacağım ki kullanıcı çalışma anında Form1 deki düğmeyi tıkladığı zaman bir diyalog kutusu içinde kullanıcıya mesaj verilmesini sağlayacağım. Bu işlem için yerli yabancı diğer kitapların aksine size hemen button1 in üzerinde çift tıklama yapın sonra da şu satırı yazın demeyeceğim. Đşin özünü anlatmak için Form1 in görsel yapısı görüntülenirken View menüsünden Code komutunu verip Form1 e ait Form1.cs adlı kod dosyasının görüntülenmesini sağladım. Ekran görüntüsü küçük olsun diye using bloğundan şu anda gerekli olmayan bazı satırları sildim.

112 112 Memik Yanık - Visual C# a Başlangıç Kitabı Kafanızın karışmaması için baştan alayım: Express Edition veya Visual Studio ile Windows Forms uygulaması hazırlanıp uygulamaya dahil edilen her form için 2 kod dosyası hazırlanmaktadır. Form1.cs dosyasında programcının yazdığı kodlar yer alırken formun görsel yapısı ile ilgili satırlar Form1.Designer.cs dosyasında yer olmaktadır. Derleme sırasında bu 2 dosya bir araya getirilmektedir. Bu şekilde bir sınıfa ait kodların birden fazla kod dosyası arasında paylaşılmasına Partial Class(parçalı sınıf) denilmektedir. Form1.cs dosyasına dikkatli baktığınızda InitializeComponent() metodunun işletildiğini görebilirsiniz. Bu metodun yani InitializeComponent metodunun Form1.Designer.cs dosyasında olduğunu biliyorsunuz. Şimdi Form1.cs dosyasındaki Form1 sınıfının sınırları içinde button1 nesnesi tıklandığında işletilmek üzere bir metot hazırlayacağım. Hazırladığım metot Object ve EventArgs tipinde 2 parametreye sahiptir. Çünkü herhangi bir button nesnesinin Click olayını ancak Object ve EventArgs tipinde 2 parametreye sahip metotlar temsil edebilmektedir. public partial class Form1 : Form public Form1() InitializeComponent(); private void ilk_button_click(object sender, EventArgs e) MessageBox.Show( Düğmeyi tıkladınız );

113 Memik Yanık C# a Başlangıç Kitabı 113 Kendi hazırladığım metoda ilk_button_click() adını verdim. Doğrusu, metoda, ilgili nesnenin adını çağrıştıracak bir adın verilmesidir. Çalışma anında projenin formundaki düğme tıklansa bile bu metot işletilmez. Bizim yapmamız gereken button1 nesnesinin Click olayı ile, bu metodu ilişkilendirmek olmalıdır. Bu ilişkilendirmeyi yapmaya en uygun yer Form1.Designer.cs dosyasındaki InitializeComponent() metodudur. Bu metodun içine yazdığım satırı aşağıda görebilirsiniz. Bu satırda eşitliğin sol tarafındaki button1 düğmenin adıdır. Eşitliğin sol tarafındaki Click ise button1 nesnesinin tıklama olayını işaret etmektedir. Tabii bu satırdaki this gözünüzden kaçmamıştır: this, kendisi için metot yazılan Form1 sınıfını temsil etmektedir. Eşitliğin sağ tarafında ise parantezin içine yazılanın Form1.cs adlı kod dosyasında hazırladığım metodun adı olduğunu söylemekle yetineceğim. Bu ayarlamadan sonra çalışma anında ne zaman Form1 deki düğme tıklanırsa Form1.cs deki ilk_button_click() metodu işletilir. Dikkat ettiyseniz yukarıda Form1 deki düğme için metot hazırlama ve bu metodu Click olayı ile ilişkilendirme konusunda Express Edition dan yararlanmadım. Şimdi hem Form1.cs dosyasındaki metodu hem de Form1.Designer.cs dosyasına yazıp yukarıda işaret ettiğim satırı sileceğim. Ardından metot hazırlama ve bu metodu Click olayı ile ilişkilendirme işlemini yaparken Express Edition dan yararlanacağım. Tasarım anında forma yerleştirdiğiniz button nesnesini çift tıklamanız halinde Express Edition sizin için hem bir metot hazırlar hem de yukarıda verilen satırın benzerini hazırlayıp Form1.Designer.cs dosyasındaki InitializeComponent() metoduna ekler. Aşağıda verdiğim ekran görüntüsünü yukarıda kendi hazırladığım metodu silip tasarım anında button1 nesnesini çift tıkladıktan sonra aldım.

114 114 Memik Yanık - Visual C# a Başlangıç Kitabı Bu metot button1 nesnesinin Click olayını temsil etmesi için hazırlandığı için Express Edition metoda ad seçerken nesnenin ve olayın adını kullandı. Tabii bu şart değildir. Anlatılan şekilde hazırladığınız metoda istediğiniz adı verebilirsiniz. Bu andan itibaren çalışma anında Form1 e yerleştirdiğim düğme çalışma anında tıklandığında bu metot işletilir. Tabi bu metot henüz işletilebilir herhangi bir satır içermediği için çalışma anında düğme tıklanıp Click olayının meydana gelmesi sağlansa bile tepki vermez. Tahmin edeceğiniz gibi tasarım anında formdaki düğme çift tıklandığında bu metodun hazırlanmasından başka Form1.Designer.cs dosyasında bulunan InitializeComponent() metoduna yukarıda verdiğim satır eklenerek bu metot ile button1 nesnesinin Click olayı ilişkilendirildi. Forma yerleştirilen button ve diğer nesnelerin ilgili olayıyla metotların ilişkisi istenirse Properties penceresinde kurulabilir. Aşağıda verdiğim ekran görüntüsünü aldığım sırada Properties penceresinde button1 nesnesinin özellikleri listeleniyordu.

115 Memik Yanık C# a Başlangıç Kitabı 115 Properties penceresi 2 amaca yönelik olarak işlev görmektedir. Birincisi, form ve Toolbox tan yararlanılarak formlara yerleştirilen nesnelerin özellikleri hakkında bilgi edinmek ve gerekirse bu özelliklerde değişiklik yapmaktır. Bu penceredeki Events düğmesi tıklandığında ise o sırada seçili durumdaki nesneye kaynaklık eden Class ın olayları listelenmektedir. Aşağıda verilen ekran görüntüsünü button1 nesnesinin özellikleri listelenirken Events düğmesini tıkladıktan sonra aldım. Bu button nesnesinin Click olayı Express Edition(veya Visual Studio) tarafından daha önceden Form1.cs dosyasındaki button1_click() metoduyla ilişkilendirildiği için Click olayının karşısında bu metodun adı yazılıdır. Bu sırada Click olayının karşısındaki metodun adını silerseniz Express Edition gider Form1.Desing.cs dosyadaki metot ile olayı ilişkilendiren satırı siler. Konu üzerinde düşünmenizi sağlamak için forma button2 adında 2. bir düğme yerleştirip Properties penceresinden yararlanıp bu düğmenin Click olayına button1_click adını vermiş olduğum metodun adını aktardım. Bu şartlarda çalışma anında formdaki 2. düğme tıklandığında Express Edition den yararlanıp button1 için hazırlayıp button1_click() adını verdiğim metot işletilir. Bu şartlarda button1_click() metodu ile, hem button1 in hem de button2 nin Click olayı ilişkilendirildiği için çalışma anında ister button1 ister button2 tıklansın aynı metot işletilir. Hem button1 hem de button2 için

116 116 Memik Yanık - Visual C# a Başlangıç Kitabı Properties penceresinde Click olayı için aynı metodu seçmenin etkisiyle Form1.Designer.cs dosyasına aşağıda verdiğim 2 satır eklenir. this.button1.click +=new System.EventHandler(this.button1_Click); this.button2.click += new System.EventHandler(this.button1_Click); Şimdi ise forma bir TextBox yerleştireceğim. Öncelikle forma daha önce yerleştirdiğim button1 ve button2 adlı düğmeleri sileceğim. Forma yerleştirdiğiniz düğmeleri seçip Delete tuşuna basarsanız Express Edition gider Form1.Designer.cs dosyasında bu düğmelerle ilgili ne var ne yok her şeyi siler. Ancak tasarım anında düğmeyi çift tıklayarak veya kendi hazırladığınız bir metot varsa Form1.cs dosyasından silinmez. Söz konusu metoda gerek duymuyorsanız kendiniz silebilirsiniz. Forma yerleştirmiş olduğunuz TextBox ı tasarım anında çift tıklarsanız Express Edition TextBox ın TextChanged olayı için metot hazırlamak istediğinizi varsaymaktadır. Bu nedenle TextBox ı çift tıklarsanız hem Form1.cs dosyasının içeriği görüntülenir hem de aşağıdaki gibi bir metot hazırlanır. public partial class Form1 : Form public Form1() InitializeComponent(); private void textbox1_textchanged(object sender, EventArgs e) Bu metot çalışma anında TextBox ın içeriği değiştirildikçe otomatik olarak işletilir. Ancak kendim bu TextBox ın TextChanged olayı için değil KeyPress olayı için metot hazırlamak istiyorum. Şimdi bir tekrar yapalım: Tasarım anında formu çift tıklarsanız Express Edition ve Visual Studio sizin formun Load olayı için bir metot hazırlamak istediğinizi, Button nesnesini çift tıkladığınızda button nesnenin Click olayı için metot hazırlamak istediğinizi ve TextBox ı çift tıkladığınızda ise TextChanged olayını temsil edecek bir metot hazırlamak istediğinizi varsaymaktadır. Madem forma yerleştirdiğim

117 Memik Yanık C# a Başlangıç Kitabı 117 TextBox ın KeyPress olayını temsil edecek bir metot hazırlamak istiyorum o halde söz konusu TextBox seçili iken Properties penceresinde TextBox a ait olaylarının listelenmesini sağlamalıyım. Bu TextBox la ilgili olarak KeyPress olayı meydana geldiğinde(yani imleç TextBox ın içinde iken kullanıcı klavyenin herhangi bir tuşuna bastığında) işletilmek üzere daha önce hazırladığınız bir metot varsa bu olaya ait liste kutusunu açıp bu metodu KeyPress olayıyla ilişkilendirebilirsiniz. Bu amaçla kullanabileceğimiz herhangi bir metodumuz olmadığı için KeyPress olayının üzerinde çift tıklama yapmalıyız. KeyPress olayını çift tıkladığınızda Express Edition hem bir metot hazırlar hem de Form1.Designer.cs dosyasına müdahale edip bu metot ile KeyPress olayını ilişkilendirir. public partial class Form1 : Form public Form1() InitializeComponent(); private void textbox1_keypress(object sender, KeyPressEventArgs e) Express Edition tarafından hazırlanan bu metotta, metot adından sonra parantezlerin içinde (object sender, KeyPressEventArgs e) bilgisi var. Başka bir deyişle TextBox1 in KeyPress olayını temsil etmek üzere hazırlanan bu metot Object ve KeyPressEventArgs tipinde 2 parametreye sahiptir. Basılan tuşu temsil eden bilgi metoda KeyPressEventArgs tipindeki e adındaki parametre ile gönderilir. TextBox ın içinde iken Enter tuşuna basıldığı zaman TextBox a girilmiş bilgileri bir diyalog kutusu içinde ekrana getirmek için bu metodu aşağıdaki gibi düzenledim. private void textbox1_keypress(object sender,keypresseventargs e)

118 118 Memik Yanık - Visual C# a Başlangıç Kitabı if (e.keychar == 13) MessageBox.Show(textBox1.Text); Bu metotta if deyimi ile en son basılan tuşun ASCII kodu 13 olan Enter olup olmadığı araştırılıyor. En son basılan tuşun kodu 13 ise MessageBox sınıfının Show() metodu ile TextBox ın Text özelliğinin içeriği ekrana getiriliyor. En son basılan tuşun kodu 13 değilse imleç TextBox ın içinde bilgi girişi için beklemeye devam eder. Forma yerleştirilen TextBox ve Button gibi nesnelerin değişik olaylarını temsil etmek üzere metot hazırlama işleminin kavranmasına katkı olması için TextBox ların Enter ve Leave olaylarından söz edeceğim. Formdaki herhangi bir nesneden TextBox ın üzerine gittiğinizde veya imlecin TextBox a yerleşmesine neden olduğunuzda Enter olayı meydana gelir. Bu olayın nasıl kullanıldığına örnek olması için forma birden fazla TextBox yerleştirip ilk TextBox ın Enter olayını temsil etmek üzere aşağıda verdiğim metodu hazırladım. Tabii yarın bir gün yerli yazarın birisi ortaya çıkıp TextBox ların Enter olayını temsilen metot hazırlamayı ilk ben akıl ettim, dolayısıyla fikri haklarıma tecavüz ettiniz buyurun mahkemeye derse hiç şaşırmamak gerekir. Zira bu memlekette bu böyle bir iddiayı onaylayacak çok sayıda bilim eri vardır. private void textbox1_enter(object sender, EventArgs e) textbox1.backcolor = Color.GreenYellow; Bu metoda yazılan satır sayesinde textbox1 in üzerine gidildiğinde zemin rengi değişikliği olur. Kullanıcı TextBox a bilgi girip başka bir kontrolün yani nesnenin üzerine gittiğinde ise zemin rengini eski halinde çevirmek istiyorsanız aynı TextBox ın Leave olayını temsil eden(yani Leave olayı meydana geldiğinde işletilen) metodu aşağıdaki gibi düzenleyebilirsiniz. private void textbox1_leave(object sender, EventArgs e) textbox1.backcolor = Color.White; Bazen istenen miktarda bilgi girmediği için kullanıcının TextBox tan ayrılmasına izin verilmek istenmez. Bu gibi durumlarda Validated olayından yararlanılır. Kullanıcı TextBox ı boş geçmek istediğinde buna izin vermemek için TextBox ın Validated olayını temsil eden metodu aşağıdaki gibi

119 Memik Yanık C# a Başlangıç Kitabı 119 düzenledim. Bu metotta kullanılan Focus() metodu ile formdaki istenen nesnenin üzerine gidilebilmektedir. private void textbox1_validated(object sender, EventArgs e) if (textbox1.text == "") MessageBox.Show("Bu alanı boş geçemezsiniz"); textbox1.focus(); Projeler Đçin 2. Form Hazırlamak Yukarıdaki sayfalarda işaret edildiği gibi Express Edition ile gelen Windows Forms Application şablonu ile hazırlanan projeler Form1 adında bir forma sahip olmakta ve bu form projenin başlangıç formu olmaktadır. Projenizde 2. bir formun olmasını istiyorsanız Express Edition nın Project menüsünden Add Windows Form komutunu verip ekrana aşağıda verilen Add New Item diyalog kutusu getirmelisiniz. Bu diyalog kutusunda üzerinde çalıştığınız projeye kod dosyaları, formlar vs eklerken kullanabileceğiniz şablonlar listelenmektedir. Projeye normal bir form eklemek istediğim için Windows Form şablonunu seçtim. Bu diyalog kutusunda kod dosyasına vereceğiniz ad aynı zamanda hazırlanacak sınıfın yani formun adı olarak kullanılmaktadır. Üzerinde çalıştığım projeye Form2 adında ikinci bir form ekleyince Express Edition penceresi aşağıda verilen şekle dönüştü.

120 120 Memik Yanık - Visual C# a Başlangıç Kitabı Add New Item diyalog kutusundaki Windows Form şablonundan yararlanıp üzerinde çalıştığım projeye Form2 adında 2. form dahil edince bu formu temsilen ikisi kod dosyası olmak üzere toplam 3 dosya hazırlandı. Form2.Designer.cs dosyasında formun görsel yapısı ile ilgili kodlar bulunurken Form2.cs dosyasında ise programcının yazdığı satırlar olmaktadır. Şimdi projedeki 2. formu başlangıç formu olarak ayarlayacağım. Başka bir deyişle proje çalıştırıldığı zaman ekrana 2. formun gelmesini sağlayacağım. Bu amaçla Program.cs dosyasındaki Main() metodunda Applicaiton sınıfının Run() metoduna parametre olarak Form1 sınıfının örneği yerine Form2 nin örneğini parametre olarak verdim. static void Main() Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form2()); Projeki 2. Formu Ekrana Getirmek Projenizdeki ikinci formu yani başlangıç formu olarak kullanılmayan formu ekrana getirmek istiyorsanız bazı hazırlıkları yapmanız gerekir. Üzerinde çalıştığım projedeki 2. formu ekrana getirirken kullanmak üzere ilk forma bir düğme yerleştirdim ve bu düğmenin Click olayını temsil etmek üzere aşağıda verdiğim metodu hazırladım. Bu metoda yazdığım satır ile Form2 sınıfından yola çıkılarak ikinci_form adında bir nesne hazırlanmaktadır. Bakmayın siz başka kitaplarda bu işleme yavru(m) değişken tanımlama

121 Memik Yanık C# a Başlangıç Kitabı 121 demelerine burada Form2 sınıfının örneği hazırlanmaktadır, yani nesne hazırlanmaktadır. private void button1_click(object sender, EventArgs e) Form2 ikinci_form = new Form2(); Yukarıdaki sayfalarda belirtildiği gibi herhangi bir Class ın(burada Form2) örneği hazırlanırken new anahtar kelimesi kullanılmaktadır. new anahtar kelimesinden sonra ilgili sınıfın yapıcı yani constructor metodunu kullanmak gerekiyor. Yukarıdaki sayfalarda belirtildiği gibi sınıfların yapıcı metoduna sınıfın adı verilmektedir. Buna göre Form2 sınıfının yapıcı metodunun adı Form2() olmaktadır. C# programlama dilinde metotlar kullanılırken metot adına () eklenmektedir. Bazı yazarlar bir sınıfın örneğini almaya yavru değişken tanımlama diyorlar. Tabii bazılarınızın aklına yavru değişken olduğuna göre torun değişken nasıl tanımlanır sorusu gelmiş olabilir. Size bir tiyo: Dünyanın en zor işlerinden birisi nesneye yönelik programcılık kavramlarına sahip olmadan C# gibi %100 nesneye yönelik programlama dilini anlatmaya soyunmaktır. Bu metoda yazdığım satırda gerçekte 2 işlem yapılmaktadır. Đlk işlemde Form2 tipinde değişken tanımlanmaktadır. 2. işlemde ise new anahtar kelimesi ile Form2 sınıfının yapıcı metodu işletilip bu metodun geriye gönderdiği nesne örneği(daha doğrusu nesnenin referansı) tanımlanan değişkene aktarılmaktadır. Bu şekilde hazırlanan Form2 tipindeki nesne Show() metodu ile ekrana getirilir. Form sınıfının Show() metodunun nasıl kullanıldığını aşağıda görebilirsiniz. 2 form içeren proje başlatıldığında projenin ilk formunun kendiliğinden ekrana geldiğini biliyorsunuz. private void button1_click(object sender, EventArgs e) Form2 ikinci_form = new Form2(); ikinci_form.show(); Bu kodda Form2 sınıfının örneğinin referansını tutacak değişkene ikinci_form adını verdim. Olur ya yerli yazarın birisi de kitabında ikinci_form adında bir değişken tanımlamıştır. Tedbir almazsam değişken adı çalmakla suçlanabilirim. değişken adı çalmış mı sorusuna cevap aramak amacıyla bu metni okuyacaklara rehber olması bakımından yukarıda verdiğim kodu bir de aşağıdaki gibi düzenledim. Yani böylece değişkenlere ad seçerken

122 122 Memik Yanık - Visual C# a Başlangıç Kitabı çaresiz kalıp başka kitaplardan değişken adı çalmayı tercih etmediğimi bilgisayar tahsili yapmış öğretim üyelerine, bilen kişilere ve yerli programcılık kitabı yazarlarına kanıtlamış oluyorum. private void button1_click(object sender, EventArgs e) Form2 ikinci_kazma = new Form2(); ikinci_kazma.show(); Böylece değişkenlere ad bulabildiğimi kanıtladıktan sonra konumuza devam edebiliriz. Ekranda 2. form varken yukarıda verilen kod işletildiğinde, yani formdaki düğme tekrar tıklandığında aynı formun 2. veya 3. kopyası ekrana getirilir. Projedeki 2. formun 2. ve 3. kopyasının aynı anda ekrana gelmesini engellemek için kullanılabilinecek değişik teknikler olmakla birlikte ilk aklıma geleni yazacağım. Bu amaçla yukarıda hazırladığım kodu değiştirip Show() metodu yerine ShowDialog() metodunu kullandım. private void button1_click(object sender, EventArgs e) Form2 ikinci_form = new Form2(); ikinci_form.showdialog(); ShowDialog() metodu ile ekrana getirilen form kapatılmadan projenin ana formuna geçilemez. Formları ShowDialog() metodu ile ekrana getirmenin bir diğer özelliği ise şudur: ShowDialog() metodu ile ekrana getirilen form normal bir şekilde yani Kapat düğmesi tıklanarak kapatıldığında bellekten yok edilmeyip gizlenmektedir. Bu sorunun önüne geçmek, başka bir deyişle hem 2. formu Show() metodu ile ekrana getirmek hem de ekranda aynı anda 2. kopyasının olmasını engellemek için değişken tanımlama satırı düğmeye ait Click() metodunun dışına alınabilinir. Aşağıda verilen kodda bu işlemi nasıl yaptığımı görebilirsiniz. Yukarıda verdiğim kodda ikinci_form adındaki değişkeni button1_click() metodu sınırları içinde tanımladığım için bu değişken yani nesne ancak bu metodun sınırları içinde yaşar. Aşağıda verdiğim kodda ise bu değişkeni metodun sınırları dışına, başka bir Class bloğuna aldığım için bu nesne bu Class ın her yerinde yaşar. Form2 ikinci_form = new Form2(); private void button1_click(object sender, EventArgs e) ikinci_form.show();

123 Memik Yanık C# a Başlangıç Kitabı 123 Bu şartlarda formdaki düğmeyi tekrar tıklasanız bile projedeki 2. form tekrar ekrana getirilmez. Ancak bu şekilde ekrana getirdiğiniz 2. formu kapattıktan sonra Show() metodu ile tekrar ekrana getirmek istemeniz halinde hata meydana gelir. Çünkü bu şekilde hazırlanıp Show() metodu ile ekrana getirilen form normal bir şekilde kapatıldığında otomatik olarak bellekten silinir. Dolayısıyla yok edilen form tekrar ekrana getirilemez. Projedeki 2. formun ekrana getirilmesi sırasında yaşanan bütün sorunların önüne geçmek için formu oluşturan ve Show() metodu ile ekrana getiren satırları aynı metoda yazdım ama form nesnesini new anahtar kelimesi ile tekrar oluştururken mevcut olup olmadığını araştırdım. Söz konusu form henüz oluşturulmadıysa null olmaktadır. Form2 ikinci_form; private void button1_click(object sender, EventArgs e) if (ikinci_form == null ikinci_form.isdisposed) ikinci_form = new Form2(); ikinci_form.show(); Yukarıdaki sayfalarda yazılanlara göre projede kaç form olursa olsun Program.cs dosyasında bu formlardan birisinin örneği new anahtar kelimesi ile hazırlanıp Application sınıfının Run() metoduna parametre olarak verilmektedir. Program.cs dosyasında new anahtar kelimesini birden fazla kez kullanıp farklı sonuçlar elde edebilirsiniz. Bu konuda bilgi vermek için 2 forma sahip yeni bir proje hazırladım ve Program.cs dosyasındaki Main() metodunu aşağıdaki gibi düzenledim. static void Main() Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1()); Application.Run(new Form2()); Bu şartlarda proje çalıştırılırsa Run() metodunun kullanıldığı ilk satırda projenin ilk formu ekrana getirilir. Đlk form kapatıldığında Run() metodunun 2. kez kullanıldığı satır işletilir ve 2. form ekrana getirilir. Bu şartlarda Form2 kapatıldıktan sonra projenin çalışması sona erer. Formları Kapatmak ve Projelerin Çalışmasını Sona Erdirmek

124 124 Memik Yanık - Visual C# a Başlangıç Kitabı Projenizin başlangıç formunu kapattığınızda ister o sırada açık olan başka form olsun ister olmasın projenin çalışması sona erer. Đster projenin başlangıç formu ister diğer formlar kapatılmak istensin kapatılma öncesi FormClosing olayı meydana gelmektedir. Bu olay meydana geldiği zaman işletilecek bir metot hazırlayarak kullanıcıyı uyarabilir veya formun kapatılmasını engelleyebilirsiniz. Bu amaçla Properties penceresinde projenin ilk formunun özellikleri listelenirken Events sekmesine geçtim ve FormClosing olayını çift tıklayıp Express Edition nın aşağıdaki gibi bir metot hazırlamasını sağladım. private void Form1_FormClosing(object sender, FormClosingEventArgs e) Metodun yapısı incelendiğinde birisi object tipinde diğeri FormClosingEventArgs tipinde 2 parametreye sahip olduğu görülür. Kullanıcı formu kapatmak isteyip FormClosing olayının meydana gelmesine neden olduğunda metotta e adı verilen FormClosingEventArgs tipindeki parametreden yararlanıp formun kapatılmasını kullanıcının onayına bağlayabilirsiniz. Bu işlemin nasıl yapıldığını anlatmak için bu metodu aşağıdaki gibi düzenledim. private void Form1_FormClosing(object sender, FormClosingEventArgs e) DialogResult Sonuc; Sonuc=MessageBox.Show("Pencere kapatılsın mı?", Kapatma", MessageBoxButtons.YesNoCancel); if (Sonuc == DialogResult.No Sonuc == DialogResult.Cancel) e.cancel = true; Bu kodda önce DialogResult tipinde bir değişken tanımladım. Çünkü kullanıcıdan onay alınırken kullanılan MessageBox sınıfının Show() metodu geriye DialogResult tipinde bilgi göndermektedir. Bu metotta MessageBox sınıfının Show() metodunun 3 parametreli sürümünü kullandım. 3. parametre olarak MessageBoxButtons.YesNoCancel kullanarak ekrana getirilecek diyalog kutusunda Evet, Hayır ve Đptal düğmelerinin olmasını sağladım. MessageBox sınıfının Show() metodu ile ekrana getirmek istediğim diyalog kutusunda Durdur, Yeniden Dene ve Yoksay düğmelerinin olmasını istemiş olsaydım 3. parametre olarak MessageBoxButtons.AbortRetryIgnore sabitini kullanırdım. MessageBox sınıfının Show() metodu, tıklanan düğmeye

125 Memik Yanık C# a Başlangıç Kitabı 125 bağlı olarak geriye DialogResult tipinde bir değer göndermektedir. Geriye gönderilen bilgiyi öğrenmek için Sonuc değişkenin içeriğini kontrol edip kullanıcı hayır veya iptal düğmesini tıkladıysa metodun FormClosingEventArgs tipindeki 2. parametresinin Cancel özelliğini True yapıp formun kapatılmasını engelledim. Kullanıcı MessageBox sınıfının Show() metodu ile ekrana getirilen diyalog kutusunda Evet düğmesini tıklarsa if deyimi ile yapılan karşılaştırma doğru değerini vermeyeceği için e adlı parametrenin Cancel özelliği false olarak kalmaya devam edeceği için formun kapatılmasının önüne geçilmemiş olunur. Yukarıda işaret edildiği gibi projenizin başlangıç formunu kapatmanız halinde projenin çalışması sona ermektedir. Varsayalım ki karşınızda projenizin başlangıç formu yok ve siz projenin çalışmasını sona erdirmek istiyorsunuz. Bu durumda önce başlangıç formunu aktif form yapıp sonra kapatırsınız. Projenizin çalışmasını sona erdirirken Application sınıfının Exit() metodundan yararlanabilirsiniz. Bu metodun nasıl kullanıldığını anlatmak için forma Cikis adında bir düğme yerleştirip bu düğmenin Click olayını temsil eden metodu aşağıdaki gibi düzenledim. private void Cikis_Click(object sender, EventArgs e) DialogResult onay; onay = MessageBox.Show("Projeden Çıkılsın mı?", "Onay Kutusu", MessageBoxButtons.YesNo); if (onay == DialogResult.Yes) Application.Exit(); Bu metotta önce DialogResult tipinde bir değişken tanımladım. Ardından kullanıcıdan programdan çıkılıp çıkılmayacağı konusunda MessageBox sınıfının Show() metodu sayesinde onay alınmaktadır. Show metodu bu şekilde kullanıldığında ekrana getirilecek diyalog kutusunda Evet veya Hayır düğmeleri olur. Kullanıcı bu diyalog kutusundaki Evet düğmesini tıklarsa onay değişkenine DialogResult.Yes bilgisi, Hayır düğmesini tıkladığında ise DialogResult.No

126 126 Memik Yanık - Visual C# a Başlangıç Kitabı bilgisi aktarılır. onay adını verdiğim değişkenine "DialogResult.Yes" sabiti aktarılmışsa if deyimine parametre olarak verilen karşılaştırmanın sonucu doğru olur ve ile işaretleri arasında bulunan satır işletilir ve Application.Exit(); satırı ile projenin işletimi sona erdirilir PictureBox Konrolü.NET Framework ile gelip Visual Studio ve Express Edition nın Toolbox ında yer alan çok sayıda kontrol bulunmaktadır. Gerçekte birer sınıf olan bu kontrollerin her birisinin farklı işlevleri vardır. Bu kitapçıkta ancak birkaç kontrolden söz edebildik. Programcılığa henüz adım atanların ilgisini çeken kontrollerden birisi PictureBox olduğu için kısaca PictureBox tan söz edeceğiz. Bu amaçla Toolbox tan yararlanıp üzerinde çalıştığım projenin formuna PictureBox nesnesi yerleştirdim. Forma PictureBox nesnesini yerleştirdikten sonra PictureBox tarafından sınırlanan alanda istediğiniz resim dosyasının içeriğini görüntüleyebilirsiniz. Bu işlemi Properties penceresinde yapmak yerine kod yazarak yapacağım. Bu amaçla forma Button nesnesi yerleştirip bu düğmenin Click olayı ile ilişkilendirdiğim metodu aşağıdaki gibi düzenledim. private void resim_sec_click(object sender, EventArgs e) picturebox1.image= System.Drawing.Bitmap.FromFile("C:\\jazz.jpg"); Bu metoda yazdığım satırda System.Drawing de bulunan Bitmap sınıfının FromFile() metodu ile ilgilendiğim jpg dosyasını okuyup PictureBox nesnesinin Image özelliğine aktardım. Express Edition ve Visual Studio ile hazırlanan projelerde System.Drawing adlı namespace kod dosyasının başında using deyimi ile kullanılacak sınıfların aranacağı listeye dahil edildiği için Bitmap sınıfından önce namespace adını yazmayabilirdim. Burada dikkat edilmesi gereken bir nokta var: C# ta \ karakteri özel bir karakter olduğu için çift \\ kullanmak gerekiyor. PictureBox ta görüntülenecek dosyayı çalışma anında seçebilmek için forma ayrıca bir OpenFileDialog nesnesi yerleştirdim. OpenFileDialog nesnesi

127 Memik Yanık C# a Başlangıç Kitabı 127 çalışma anında formun üzerinde görünmediği, başka bir deyişle görsel bir kontrol olmadığı için formun altında hazırlanan panele yerleştirilmektedir. Çalışma anında kullanıcı formdaki düğmeyi tıkladığında ekrana dosya seçimi yapılan diyalog kutusunu getirmek ve seçilen dosyayı PictureBox ta görüntülemek için yukarıda verdiğim kodu aşağıdaki gibi düzenledim. private void resim_sec_click(object sender, EventArgs e) System.Windows.Forms.DialogResult Sonuc; openfiledialog1.filter = "Resim Dosyaları *.JPG;*.BMP;*.GIF"; Sonuc = openfiledialog1.showdialog(); if (Convert.ToString(Sonuc) == "OK") string Dosya = openfiledialog1.filename; picturebox1.image = System.Drawing.Bitmap.FromFile(Dosya); Bu kodda tanımladığım değişken ve nesnelere verdiğim adlar(resim_sec, Sonuc ve Dosya) herkesin aklına gelebilecek birer değişken adı olduğu için değişken adı hırsızı olarak anılmam an meselesidir. Bu nedenle yani bu kodda tanımlanan değişkenlere başka adlar verilse bile kodun çalışacağını kanıtlamak için bu kodu bir de aşağıdaki gibi düzenledim. private void adam_sec_click(object sender, EventArgs e) System.Windows.Forms.DialogResult hatice_netice; openfiledialog1.filter = "Resim Dosyaları *.JPG;*.BMP;*.GIF"; hatice_netice = openfiledialog1.showdialog(); if (Convert.ToString(hatice_netice) == "OK") string kutuk_oglu_kutuk = openfiledialog1.filename;

128 128 Memik Yanık - Visual C# a Başlangıç Kitabı picturebox1.image=system.drawing.bitmap.fromfile(kutuk_oglu_kutuk); Bu metotta önce System.Windows.Forms.DialogResult tipinde bir değişken tanımladım. Bu değişkenden dosya seçilen diyalog kutusunu kullanıcının hangi düğme ile kapattığını öğrenirken yararlanacağım. Devamında OpenFileDialog nesnesinin Filter özelliğini ayarladım. Bu ayarlama sayesinde OpenFileDialog nesnesi ile ekrana getirilecek diyalog kutusunda yalnızca geçerli klasördeki JPG, BMP ve GIF uzantılı dosyaların listelenmesini sağladım. FromFile() metodunun işlevi üzerinde düşünmenizi sağlamak için önce bir Bitmap tipinde bir değişken tanımladım. Devamında FromFile() metodu ile okuduğum resim dosyasını Bitmap nesnesine, oradan da PictureBox a aktarmaya çalıştım. private void resim_sec_click(object sender, EventArgs e) Bitmap resim; resim = Bitmap.FromFile("C:\\jazz.jpg"); picturebox1.image = resim; Đlk bakışta bu 3 satırlık koddan sonuç alınabileceği sanılabilir. Gerçekte bu kod hataya neden olur. Çünkü Bitmap sınıfının FromFile() metodu geriye Image tipinde nesne göndermesine rağmen Bitmap tipindeki değişkene aktarmaya çalıştık. Yukarıda FromFile() metodunun geriye gönderdiği nesneyi direk PictureBox ın Image tipindeki Image özelliğine aktardığımız için sorun yaşamamıştık. Bu 3 satırlık kod aşağıdaki gibi düzenlenirse hata meydana gelmez. private void resim_sec_click(object sender, EventArgs e) Image resim; resim = Image.FromFile("C:\\jazz.jpg"); picturebox1.image = resim; Programcıların en çok gerek duydukları işlemlerden birisi tipler arasında dönüştürme yapmaktır. Image tipindeki nesneyi Bitmap tipindeki nesneye aktarmak için bu kodu değiştirip Bitmap tipinde değişken tanımlayıp FromFile() metodunun geriye gönderdiği Image tipindeki nesneyi dönüştürüp Bitmap tipindeki değişkene aktardım. private void resim_sec_click(object sender, EventArgs e)

129 Memik Yanık C# a Başlangıç Kitabı 129 Bitmap resim; resim = (Bitmap)Bitmap.FromFile("C:\\jazz.jpg"); picturebox1.image = resim; Burada 2. satırdaki (Bitmap) ile söz konusu bilgi Bitmap tipine dönüştürülmektedir. Đlgilenilen nesne hangi tipe dönüştürülmek isteniyorsa o tip parantezlerin içinde dönüştürülmek istenen nesnenin önüne yazılmalıdır. Burada kafaların karışmasına neden, Bitmap sınıfının FromFile() metodunun geriye Bitmap yerine Image tipinde bilgi göndermesidir. Bitmap sınıfının FromFile() metodu yerine Image sınıfının FromFile() metodunu kullansaydım dönüştürme yapmaya gerek kalmazdı. private void resim_sec_click(object sender, EventArgs e) Image resim; resim = Image.FromFile("C:\\jazz.jpg"); picturebox1.image = resim; Dönüştürme işleminin anlaşılmasına katkı olması için şimdi de ICO uzantılı bir dosyayı PictureBox ta görüntüleyeceğim. Bu amaçla hazırladığım kodu aşağıda görebilirsiniz. System.Drawing de yer alan Icon sınıfının Bitmap ve Image sınıflarında olduğu gibi FromFile() gibi bir metodu olmadığı için ilgilendiğim ico uzantılı dosyayı Icon sınıfının yapıcı metoduna parametre olarak verdim. private void resim_sec_click(object sender, EventArgs e) Icon ikon = new Icon("C:\\kapat.ico"); picturebox1.image = (Image)ikon ; Đlk bakışta bu kodun hatasız çalışıp Icon tipindeki nesnenin Image tipine dönüştürülüp PictureBox ta görüntüleneceği sanılabilir. Ne ki burada yapıldığı gibi icon tipindeki nesneyi Image nesnesine dönüştürmek mümkün olmadığı için Icon sınıfının ToBitmap() metodundan yararlanmak gerekiyor. Bu metodun nasıl kullanıldığını aşağıda görebilirsiniz. private void resim_sec_click(object sender, EventArgs e) Icon ikon = new Icon("C:\\kapat.ico"); picturebox1.image = ikon.tobitmap() ;

130 7. BÖLÜM GRAFĐK ve ÇĐZĐM ĐŞLEMLERĐ System.Drawing de tanımlı sınıflar ve işlevleri hakkında bilgi vermek amacıyla ilk olarak proje çalıştırıldığında formun üzerine bir dikdörtgen çizmek için kod hazırlayacağım. Formun üzerine grafiksel şekilleri Paint olayı meydana geldiği zaman çizilmesini istediğim için projedeki ilk formun Paint olayını temsil eden metoda aşağıda verdiğim satırları yazdım. private void Form1_Paint(object sender, PaintEventArgs e) System.Drawing.Graphics Cizim; Cizim = this.creategraphics(); C# projesinde System.Drawing deki sınıflardan yararlanarak çizim veya grafik işlemlerini yapabilmek için Graphics nesnesine gerek vardır. Bu nedenle bu kodda Graphics nesnesini oluşturdum. Başka bir deyişle formun üzerini çizim alanı olarak kullanmak istediğimi belirttim. Bunu günlük hayatta ressamın tuvalini hazırlamasına benzetmek mümkündür. Çizimi formun üzerine değil de forma yerleştirilmiş olan PictureBox a yapmak isteseydim Graphics nesnesini aşağıdaki gibi hazırlardım. private void Form1_Paint(object sender, PaintEventArgs e) System.Drawing.Graphics Cizim; Cizim = picturebox1.creategraphics(); Graphics sınıfından yararlanıp değişken tanımlayıp form sınıfının CreateGraphics() metodu ile çizim alanını belirledikten sonra Pen nesnesi hazırlayacağım. Çünkü formun üzerine kare çizilirken Pen nesnesine gerek duyulur. Bu amaçla Pen sınıfından yararlanıp 2. bir değişken tanımladım. private void Form1_Paint(object sender, PaintEventArgs e) System.Drawing.Graphics Cizim = this.creategraphics(); System.Drawing.Pen Kalem; Kalem = new System.Drawing.Pen(Color.Blue, 3); Bu kod ile Pen nesnesinin renginin mavi, kalınlığının ise 3 piksel olmasını sağladım. Pen nesnesinin kalınlığı belirtilmezse bunun 1 piksel olduğu varsayılır. Anlatılan şekilde Graphics ve Pen nesnesini hazırladıktan sonra

131 Memik Yanık C# a Başlangıç Kitabı 131 formun üzerine kare çizmek üzere Graphics nesnesinin DrawRectangle metodunu aşağıdaki gibi kullandım. private void Form1_Paint(object sender, PaintEventArgs e) System.Drawing.Graphics Cizim = this.creategraphics(); System.Drawing.Pen Kalem=new System.Drawing.Pen(Color.Blue,3); Cizim.DrawRectangle(Kalem, 20, 20, 80, 80); Bu metottaki this, üzerine dikdörtgen çizilecek formu temsil etmektedir. Bu kodda son olarak DrawRectangle() metodu ile dikdörtgen çizilmektedir. DrawRectangle() metodu, Pen nesnesini ve dikdörtgenin koordinatlarını parametre olarak almaktadır. Proje çalıştırılıp bu metot işletilirse formun üzerine aşağıdaki gibi bir dikdörtgen çizilir. GreateGraphics() metodu ile oluşturulan nesnenin işlevi bitince Dispose() metodu ile bellekten silinmesi gerekir. Çünkü çok sayıda grafik nesnesinin hazırlanması halinde bellek sorunları ile karşılaşılabilinir. private void Form1_Paint(object sender, PaintEventArgs e) Graphics Cizim = this.creategraphics(); Pen Kalem = new Pen(Color.Blue, 4); Cizim.DrawRectangle(Kalem, 20, 20, 80, 80); Cizim.Dispose(); Formun Paint metoduna yazdığım bu kodda Graphics nesnesi hazırlayıp çizim alanı olarak kullandım. Eğer formun üzerine Drawing isim alanındaki sınıflardan yararlanarak bir şeyler çizeceksiniz ve çizim işlemini yapacak kodları ilgili forma ait Paint() metoduna yazacaksanız Graphics nesnesi hazırlamaya gerek yoktur. Çünkü Paint olayını temsil eden metodun e adı verilen PaintEventArgs tipindeki parametresi ile metoda Graphics nesnesi gönderilmektedir. Bu nedenle aşağıda verdiğim kod sorunsuz çalışır ve forma kare çizer.

132 132 Memik Yanık - Visual C# a Başlangıç Kitabı private void Form1_Paint(object sender, PaintEventArgs e) Pen Kalem = new Pen(Color.Blue, 4); e.graphics.drawrectangle(kalem, 20, 20, 80, 80); e.graphics.dispose(); Đçi dolu dikdörtgen çizmek istemiş olsaydım DrawRectangle() yerine FillRectangle() metodunu kullanırdım. FillRectangle() metodu ile içi dolu dikdörtgen hazırlarken Pen yerine SolidBrush sınıfının örneğinin alınıp kullanılması gerekir. FillRectangle metodunun ve SolidBrush nesnesinin nasıl kullanıldığını aşağıda görebilirsiniz. private void Form1_Paint(object sender, PaintEventArgs e) System.Drawing.Graphics Cizim = this.creategraphics(); System.Drawing.SolidBrush Firca; Firca = new System.Drawing.SolidBrush(Color.Blue); Cizim.FillRectangle(Firca, 25, 25, 100, 100); Bu kodda Firca adında mavi renkte bir SolidBrush nesnesi hazırladıktan sonra FillRectangle() metodu ile formun üzerine içi dolu dikdörtgen çizilmesini sağladım. Yukarıda dikdörtgen çizerken çizgi rengini seçerken Pen ve PaintBrush nesnelerinin yapıcı metotlarına 1. parametre olarak Color.Blue bilgisini verdim. Renk seçimini bu şekilde yapmak yerine Color nesnesi hazırlayıp kullanabilirsiniz. Color nesnesinin nasıl hazırlandığını hatırlatmak için yukarıda verdiğim kodu aşağıdaki gibi düzenledim. private void Form1_Paint(object sender, PaintEventArgs e) System.Drawing.Graphics Cizim; Cizim = this.creategraphics(); System.Drawing.SolidBrush Firca; System.Drawing.Color Renk; Renk = System.Drawing.Color.FromArgb(25, 100, 175); Firca = new System.Drawing.SolidBrush(Renk); Cizim.FillRectangle(Firca, 25, 25, 100, 100);

133 Memik Yanık C# a Başlangıç Kitabı 133 Bu kodda önce System.Drawing de tanımlı Color sınıfından yararlanıp Renk adında bir değişken tanımladım. Ardından bu sınıfın yapıcı metodu ile Color nesnesini hazırladım. Renk hazırlarken Color sınıfının FromArgb() metodundan yararlandım. Yukarıda FromArgb() metodu ile renk elde ederken kırmızı, yeşil ve mavi renkleri temsil eden sayısal değerleri parametre olarak kullandım. Aslında FromArgb() metodu 4. bir parametreye daha sahiptir. FromArgb() metodu 3 parametre ile işletildiğinde Alfa adı verilen ilk parametrenin kullanılmadığı ve diğer parametrelerin sırası ile Kırmızı, Yeşil ve Mavi renkleri temsil ettiği varsayılmaktadır. Alfa adlı parametre kullanılmayıp veya bu metot 3 parametre ile çağrıldığı zaman Alfa adlı parametrenin 255 değerine sahip olduğu varsayılmaktadır. Bu nedenle aşağıda verilen 2 satır ile aynı renk elde edilir. Renk = System.Drawing.Color.FromArgb(255, 25, 100, 175); Renk = System.Drawing.Color.FromArgb(25, 100, 175); Alfa parametresi yerine 255 ten küçük bir değer kullanıldığı zaman renk saydamlaştırılır. Alfa parametresi farklı renkler için farklı sonuçlar verebildiği için deneme yapıp öyle kullanmak gerekir. Color Yapısı Grafik ve çizim işlemlerinde olduğu gibi kontrollerin renklerini ayarlarken Color yapısı kullanılmaktadır. Standart renklerle yetinirseniz renk ayarlamaları son derece kolaydır. Örneğin aşağıda verilen satırla TextBox ın zemin rengi ayarlanmaktadır. Çünkü Color yapısı çok sayıda rengi hazır olarak içermektedir. Başka bir deyişle Color yapısı çok sayıda static özelliğe sahiptir. textbox1.backcolor = Color.GreenYellow; Color yapısında hazır olarak duran renklerin dışında kendiniz renk tanımlamak istiyorsanız Color yapısının örneğini almanız gerekir. Color yapısının örneği diğer yapılardan farklı olarak FromArgb() metodu ile hazırlanmaktadır. Bildiğiniz gibi doğadaki renkler kırmızı, yeşil ve mavi renklerin değişik oranda karıştırılması sonucu elde edilmektedir. FromArgb() metodunun 4 farklı sürümü bulunmaktadır. Aşağıda verdiğim örnekte bu metodun 0 ile 255 arasında değişen 3 sayıyı parametre olarak aldığı sürümünü kullandım. Color rengim = Color.FromArgb(255, 0, 0);

134 134 Memik Yanık - Visual C# a Başlangıç Kitabı textbox1.backcolor = rengim; Đlk parametre kırmızı rengi temsil ederken 2. parametre yeşili ve 3. parametre mavi renk miktarını temsil etmektedir. Bu renk örneğinde kırmızı renk için en yüksek değeri kullanmışken yeşil ve mavi için en düşük değeri parametre olarak kullandım. Bu durumda burada hazırladığım renk saf kırmızıdır. Aşağıda verdiğim renk örneğinde ise mavi ve yeşilin karıştırılmasından meydana gelen bir renktir. Color rengim = Color.FromArgb(0, 105, 85); textbox1.backcolor = rengim; Renk elde edilirken kullanılan FromArgb() metodunun 0 ile 255 arasında değişen 4 parametreye sahip bir versiyonu bulunmaktadır. Bu metot 4 parametre ile kullanılırsa ilk parametrenin rengin alfa yani saydamlık değeri olduğu varsayılır. 3 parametre ile kullanılırsa alfa değerinin 255 olduğu varsayılır. Bu nedenle aşağıdaki renk yukarıdaki ile aynıdır. Color rengim = Color.FromArgb(255, 0, 105, 85); textbox1.backcolor = rengim; TextBox ve formların Backcolor özellikleri saydamlığı desteklemediği için FromArgb() metoduna 255 ten farklı bir değeri kullansaydım bu renk TextBox ın BackColor özelliğine aktarılamazdı. TextBox ve form gibi kontrollerin ForeColor özelliği saydamlığı destekliği için aşağıda verdiğim kod hataya neden olmaz. Color renk1 = Color.FromArgb(255, 0, 255, 0); Color renk2 = Color.FromArgb(20, 255, 0, 55); textbox1.backcolor = renk1; textbox1.forecolor = renk2; Gördüğünüz gibi FromArgb() metodu renkleri toplam 4 byte ile ifade etmektedir. Elinizdeki rengi int bir değerle ifade etmek istiyorsanız Color yapısının ToArgb() metodunu kullanabilirsiniz. Aşağıda verdiğim 2 satırda önce Color yapısının hazır renklerinden birisini tanımladığım Color tipindeki değişkene aktardım. Devamında bu rengi int bir değer olarak ifade etmek için ToArgb() metodunu kullandım. Color renk = Color.YellowGreen; int renk_degeri = renk.toargb(); Şimdi de int tipindeki bu renk değerinden yola çıkıp renk elde edeceğim. Bunu yaparken Color yapısının FromArgb() metodunun tek parametreli versiyonundan yararlandım.

135 Memik Yanık C# a Başlangıç Kitabı 135 Color renk = Color.YellowGreen; int renk_degeri = renk.toargb(); textbox1.backcolor = Color.FromArgb(renk_degeri); Elinizdeki rengin kırmızı, yeşil ve mavinin hangi oradan karıştırıldığını öğrenmek istiyorsanız Color yapısının R, G ve B özelliklerinden yararlanmanız gerekir. Şimdi bu 3 özellikten yararlanarak elimdeki rengin kırmızı karışım oranını biraz arttıracağım. Color renk = Color.YellowGreen; byte kirmizi = renk.r; renk = Color.FromArgb(kirmizi + 50, renk.g, renk.b); textbox1.backcolor = renk; Color yapısıyla hazır olarak gelen her rengin string tipteki Name özelliği bulunmaktadır. Renk seçerken Name özelliğinden yararlanabilirsiniz. Name özelliğini Color yapısının static FromName() metoduna parametre olarak vermek gerekmektedir. Color renk = Color.FromName("Blue"); textbox1.backcolor = renk; Daire ve Elips Çizmek Yukarıda DrawRectangle() ve FillRectangle() metotları ile formun üzerine içi boş ve dolu dikdörtgenler çizdim. Şimdi yukarıda verdiğim kodu değiştirip dikdörtgen yerine daire çizeceğim. Bu amaçla DrawRectangle() metodu yerine DrawEllipse() metodunu kullandım. private void Form1_Paint(object sender, PaintEventArgs e) System.Drawing.Graphics Daire = this.creategraphics(); System.Drawing.Pen Kalem; Kalem = new System.Drawing.Pen(Color.Blue, 3); Daire.DrawEllipse(Kalem, 25, 25, 100, 100); DrawEllipse() metoduna 4. ve 5. parametrelerde aynı değerleri kullandığım için bu kod işletildiğinde formun üzerine daire çizilir. Aşağıda verilen ekran görüntüsünü projeyi çalıştırıp bu kodu işlettikten sonra aldım.

136 136 Memik Yanık - Visual C# a Başlangıç Kitabı DrawEllipse() metodunun 4. ve 5. parametrelerinin birbirinden farklı olmasını sağlamanız halinde daire yerine elips çizilir. 4. parametre elipsin yatay genişliğinin ve 5. parametre ise yüksekliğini temsil etmektedir. Formun üzerinde içi dolu bir daire çizmek istiyorsanız önce SolidBrush nesnesi hazırlamalı ve DrawEllipse() yerine FillEllipse() metodunu kullanmalısınız. SolidBrush sınıfının ve FillEllipse metodunun nasıl kullanıldığını aşağıda görebilirsiniz. Graphics Daire = this.creategraphics(); SolidBrush Dolgu = new SolidBrush(Color.Blue); Daire.FillEllipse(Dolgu, 25, 25, 100, 100); Bildiğiniz gibi formun herhangi bir yeri tıklanıp farenin tuşu serbest bırakıldığı zaman MouseUp olayı meydana gelmektedir. Bu olay meydana geldiğinde işletilen metoda formun tıklanan yerinin koordinatları gönderilmektedir. Bu özellikten yararlanarak formun tıklanan yerine daire çizebilirsiniz. Bu amaçla hazırladığım kodu aşağıda görebilirsiniz. private void Form1_MouseUp(object sender, MouseEventArgs e) Graphics Daire = this.creategraphics(); Pen Kalem = new Pen(Color.Blue, 3); Daire.DrawEllipse(Kalem, e.x, e.y, 100, 100); Formun tıklanan yerinin koordinatları e parametresi ile metoda gönderilmektedir. Formun tıklanan yerinin koordinatları( e.x ve e.y ) DrawEllipse() metoduna 2. ve 3 parametre olarak verilerek daire veya elips çizilebilir. Aşağıda verilen ekran görüntüsünü formun üzerini birkaç kez tıklayarak bu kodu işlettikten sonra aldım.

137 Memik Yanık C# a Başlangıç Kitabı 137 Şimdi vereceğim örnekte Timer kontrolünün ve Random sınıfının nasıl kullanıldığını hatırlayacaksınız. Bu amaçla forma bir Timer yerleştirdim ve Properties penceresinde Enabled özelliğini True yapıp Interval özelliğine 250 milisaniye değerini aktardım. Bu sayede Timer nesnesinin Tick olayını temsil eden metoda yazılan kodlar her 250 milisaniyede bir kendiliğinden çalışmaya başlayacaktır. Timer nesnesinin Enabled özelliğinin içeriğini kod yazarak değiştirebilirsiniz. Hazırlamak istediğim örnekte formun değişik yerlerine elipslerin çizilmesini sağlayacağım. Bu amaçla ilk olarak Tick olayıyla ilgili metotta Graphics nesnesi hazırlayıp formun o anki genişliğini ve yüksekliğini öğrendim. private void timer1_tick(object sender, EventArgs e) int Genislik = this.clientsize.width; int Yukseklik = this.clientsize.height; System.Drawing.Graphics Daire; Daire = this.creategraphics(); System.Drawing.Pen Kalem; Kalem = new System.Drawing.Pen(Color.Blue, 3); Graphics ve Pen nesnesini hazırladıktan sonra DrawEllipse() metodu ile Graphics nesnesinin(burada form) üzerine istediğiniz boyutta elips çizebilirsiniz. Elipsin çizileceği yeri Random sınıfı ile belirlemek istediğim için bu koda aşağıda verdiğim satırları ekleyip Random sınıfı ile bulduğum değerleri DrawEllipse() metoduna parametre olarak verdim. private void timer1_tick(object sender, EventArgs e) int Genislik = this.clientsize.width; int Yukseklik = this.clientsize.height; Random Rastgele = new Random(); int X = Rastgele.Next(Genislik); int Y = Rastgele.Next(Yukseklik);

138 138 Memik Yanık - Visual C# a Başlangıç Kitabı System.Drawing.Graphics Daire; Daire = this.creategraphics(); System.Drawing.Pen Kalem; Kalem = new System.Drawing.Pen(Color.Blue, 3); Daire.DrawEllipse(Kalem, X, Y, 100, 100); Elipsin genişlik ve yüksekliğinin formun mevcut boyutlarına göre belirlenmesini sağladım. Bu kod sayesinde formun değişik yerlerine aşağıdaki gibi elipsler çizilir. Formun üzerine çizilen elipsleri silmek veya formun üzerini temizlemek üzere formun Click olayına karşılık gelen metodu aşağıdaki gibi düzenledim. private void Form1_Click(object sender, EventArgs e) System.Drawing.Graphics Cizim; Cizim = this.creategraphics(); Cizim.Clear(this.BackColor); Şimdi ise formun değişik yerlerinden başlamak üzere dışarıya doğru büyüyen kareler çizeceğim. Bu amaçla yukarıda verdiğim kodu aşağıdaki gibi düzenledim. Bu kodun yukarıda verilenden farkı, for döngüsü içinde kalan satırlardır. Bu kodun sorunsuz çalışabilmesi için Timer nesnesinin Interval özelliğinin biraz büyük olması gerekir. private void timer1_tick(object sender, EventArgs e) int Genislik = this.clientsize.width; int Yukseklik = this.clientsize.height; Random Rastgele = new Random(); int X = Rastgele.Next(Genislik); int Y = Rastgele.Next(Yukseklik);

139 Memik Yanık C# a Başlangıç Kitabı 139 Graphics Cizim = this.creategraphics(); Pen Kalem = new System.Drawing.Pen(Color.Red, 1); for (int i = 20; i >= 1; --i) Cizim.DrawRectangle(Kalem, X+i * 5, Y + i * 5, (100 - i * 10), (100 - i * 10)); Karenin genişliği ve yüksekliği başlangıçta 100 piksel olacak. Her seferinde genişlik ve yükseklik 10 piksel azaltılacak. Đlk çizilecek karenin yeri ise Random sınıfı ile belirlenecek. Aşağıda verilen ekran görüntüsünü bu kodu işlettikten sonra aldım.

C# a Başlangıç Kitabı

C# a Başlangıç Kitabı C# a Başlangıç Kitabı Memik Yanık memiky@superonline.com memikyanik@hotmail.com www.memikyanik.com Mart 2009 2 Memik Yanık - C# a Başlangıç Kitabı Önsöz Son yazdığım C# kitabımda başlangıç düzeyi konuların

Detaylı

C# a Başlangıç Kitabı

C# a Başlangıç Kitabı C# a Başlangıç Kitabı Memik Yanık memiky@superonline.com memikyanik@hotmail.com www.memikyanik.com Mart 2009 2 Memik Yanık - C# a Başlangıç Kitabı Önsöz Son yazdığım C# kitabımda başlangıç düzeyi konuların

Detaylı

C# Programlama Dili. İlk programımız Tür dönüşümü Yorum ekleme Operatörler

C# Programlama Dili. İlk programımız Tür dönüşümü Yorum ekleme Operatörler C# Programlama Dili İlk programımız Tür dönüşümü Yorum ekleme Operatörler 1 İlk Programımız Bu program konsol ekranına Merhaba dünya! yazıp kapanır. Programı geçen derste anlatıldığı gibi derleyin, sonra

Detaylı

HSancak Nesne Tabanlı Programlama I Ders Notları

HSancak Nesne Tabanlı Programlama I Ders Notları Konsol Uygulaması Oluşturma Konsol uygulaması oluşturmak için program açıldıktan sonra Create: Project ya da New Project seçeneği tıklanabilir. New Project penceresini açmak için farklı yollar da vardır.

Detaylı

4. Bölüm Programlamaya Giriş

4. Bölüm Programlamaya Giriş 4. Bölüm Programlamaya Giriş Algoritma ve Programlamaya Giriş Dr. Serkan DİŞLİTAŞ 4.1. C# ile Program Geliştirme Net Framework, Microsoft firması tarafından açık internet protokolleri ve standartları

Detaylı

MAT213 BİLGİSAYAR PROGRAMLAMA I DERSİ Ders 1: Programlamaya Giriş

MAT213 BİLGİSAYAR PROGRAMLAMA I DERSİ Ders 1: Programlamaya Giriş MAT213 BİLGİSAYAR PROGRAMLAMA I DERSİ Ders 1: Programlamaya Giriş Yard. Doç. Dr. Alper Kürşat Uysal Bilgisayar Mühendisliği Bölümü akuysal@anadolu.edu.tr Ders Web Sayfası: http://ceng.anadolu.edu.tr/ders.aspx?dersid=101

Detaylı

Java 2 Standart Edition SDK Kurulum ve Java ya Giriş

Java 2 Standart Edition SDK Kurulum ve Java ya Giriş Kurulum için ilk önce Sun Microsystems in sitesinden uygun J2SE sürümünü indirin. Ben J2SE v1. 4. 2_16 Windows Installer paketini kullandım J2SE SDK Kurulumu aşağıdaki gibi başlayacaktır. 1 Kurulum tamamlandıktan

Detaylı

Nesne Tabanlı Programlama Dersi Edirne Kız Teknik ve Meslek Lisesi

Nesne Tabanlı Programlama Dersi Edirne Kız Teknik ve Meslek Lisesi 2011-2012 Nesne Tabanlı Programlama Dersi Edirne Kız Teknik ve Meslek Lisesi Programlama Dili Nedir? 2 Programlama dili, yazılımcının bir algoritmayı ifade etmek amacıyla, bir bilgisayara ne yapmasını

Detaylı

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

Uzaktan Eğitim Uygulama ve Araştırma Merkezi JAVA PROGRAMLAMA Öğr. Gör. Utku SOBUTAY İÇERİK 2 Java Kodlarına Yorum Satırı Eklemek Java Paket Kavramı Java Kütüphane Kavramı Konsoldan Veri Çıkışı ve JOPtionPane Kütüphanesi JOptionPane Kütüphanesi Kullanarak

Detaylı

Windows 10 için Java JDK 8 ve NetBeans IDE 8.2 Kurulumu Detaylı Anlatım

Windows 10 için Java JDK 8 ve NetBeans IDE 8.2 Kurulumu Detaylı Anlatım Windows 10 için Java JDK 8 ve NetBeans IDE 8.2 Kurulumu Detaylı Anlatım Merhaba arkadaşlar bu yazımızda sizlere windows 10 platforumunda java development kit (java geliştirme kiti) Java JDK nın kurulumundan

Detaylı

NetBeans ve Eclipse Eşliğinde JAVA 8

NetBeans ve Eclipse Eşliğinde JAVA 8 NetBeans ve Eclipse Eşliğinde JAVA 8 -Örnek Bölüm- https://www.seckin.com.tr/kitap/971165446 Java'yı Öğrenmek İsteyenler İçin Birkaç Not Varsayalım ki programcılığa ilginiz var, Java yı merak ediyorsunuz.

Detaylı

Lambda İfadeleri (Lambda Expressions)

Lambda İfadeleri (Lambda Expressions) Lambda İfadeleri (Lambda Expressions) Lambda İfadeleri, değişkenlere değer atamak için kullanılan sadeleştirilmiş anonim (isimsiz) fonksiyonlardır. Bu fonksiyonlar matematikteki ve bilgisayar bilimlerindeki

Detaylı

BM-209 Nesne Yönelimli Programlama. Yrd. Doç. Dr. İbrahim Alper Doğru Gazi Üniversitesi Teknoloji Fakültesi Bilgisayar Mühendisliği Bölümü

BM-209 Nesne Yönelimli Programlama. Yrd. Doç. Dr. İbrahim Alper Doğru Gazi Üniversitesi Teknoloji Fakültesi Bilgisayar Mühendisliği Bölümü BM-209 Nesne Yönelimli Programlama Yrd. Doç. Dr. İbrahim Alper Doğru Gazi Üniversitesi Teknoloji Fakültesi Bilgisayar Mühendisliği Bölümü Java Programlama Dili Java bayt kodları Java Sanal Makineleri üzerinde

Detaylı

INPUTBOX KULLANIMI. Komut Düğmesine uygulanan algoritma örneği

INPUTBOX KULLANIMI. Komut Düğmesine uygulanan algoritma örneği INPUTBOX KULLANIMI InputBox komutu, Basic programlama dilinde program algoritması içinde ekran aracışığı ile bir sorgu yönlendirerek, kullanıcının bilgi girmesini sağlamak amacıyla kullanılır. Bu komutun

Detaylı

İşletme Fakültesi Bil. Kullanımı Ders notları 2

İşletme Fakültesi Bil. Kullanımı Ders notları 2 İşletme Fakültesi Bil. Kullanımı Ders notları 2 Öğr.Gör.Ali ATALAY EXCEL PAKET PROGRAMI Günümüzde hesap tablosu, veri analizi, kod yazımı, grafik çizimi, veri tabanı oluşturma gibi bir çok özelliği olan

Detaylı

Üst düzey dillerden biri ile yazılmış olan bir programı, makine diline çeviren programa derleyici denir. C++ da böyle bir derleyicidir.

Üst düzey dillerden biri ile yazılmış olan bir programı, makine diline çeviren programa derleyici denir. C++ da böyle bir derleyicidir. İST 205 Bilgisayar Programlama III C Programlamaya Giriş ve Matematiksel-İstatistiksel Uygulamalar Y.Doç.Dr. Levent Özbek Ankara Üniversitesi Fen Fakültesi İstatistik Bölümü Tel: 0.312.2126720/1420 ozbek@science.ankara.edu.tr

Detaylı

WebInstaller. 1. Kurulum Đçin Gereksinimler

WebInstaller. 1. Kurulum Đçin Gereksinimler WebInstaller Ürün Grubu [X] Fusion@6 [X] Fusion@6 Standard Kategori [X] Yeni Fonksiyon Versiyon Önkoşulu @6 Uygulama E-Netsis.Net uygulamasının kurulumu Netsis\ENetsis.Net\Kurulum dizininde bulunan NetsisWebInstall.exe

Detaylı

Android Ders Notları

Android Ders Notları Android Ders Notları 1. Yeni Bir Proje Başlatma Android Studio programında yeni bir proje başlatıyoruz. İlk olarak karşımıza resim 1 deki gibi bir pencere gelecek. Burada Application name kısmına proje

Detaylı

JAVA PROGRAMLAMA DİLİ ÖZELLİKLERİ

JAVA PROGRAMLAMA DİLİ ÖZELLİKLERİ JAVA PROGRAMLAMA DİLİ ÖZELLİKLERİ Java programlama dili, Java SUN bilgisayar şirketi tarafından 1991 yılında geliştiril Program bloklar halinde yazılır ve bloklar { } ile oluşturulur. Komutlar aynı satıra

Detaylı

NESNEYE YÖNELİK PROGRAMLAMA

NESNEYE YÖNELİK PROGRAMLAMA NESNEYE YÖNELİK PROGRAMLAMA Metotlar Şu ana kadar yaptığımız örneklerde hep önceden hazırlanmış ReadLine(), WriteLine() vb. gibi metotları kullandık. Artık kendi metotlarımızı yapmanın zamanı geldi. Bilmem

Detaylı

C#(Sharp) Programlama Dili

C#(Sharp) Programlama Dili Değişkenler C#(Sharp) Programlama Dili Program yazarken her zaman sabit verilerle çalışmayız, çoğu zaman programımızda bir verinin kullanıcının davranışına göre değişmesi gerekir. Kullanıcıdan bir metin

Detaylı

public static int Toplam int x, int y

public static int Toplam int x, int y static Kavramı 1 İçinde bulunduğu sınıftan nesne oluşturulmadan veya hiç bir nesneye referans olmadan kullanılabilen üyeler static olarak nitelendirilir. Metotlar ve alanlar static olarak tanımlanabilir.

Detaylı

abstract Sınıflar 1 Sınıf sınıf1 new class Ama aşağıdaki şekilde referans alınabilir;

abstract Sınıflar 1 Sınıf sınıf1 new class Ama aşağıdaki şekilde referans alınabilir; abstract Sınıflar 1 Özet sınıflar ya da özet metotlar abstract anahtar sözcüğü kullanılarak tanımlanırlar. Bir temel sınıf içinde bildirilen abstract metotların içeriği boştur. Kendisinden yeni bir instance

Detaylı

http://www.microsoft.com/visualstudio/eng/downloads

http://www.microsoft.com/visualstudio/eng/downloads Visual Studio 2012'nin kurulumunu, Visual Studio'nun kullanımını ve Windows Store'da basit bir proje hazırlanmasını anlatacağım. Hepsinden önce Visual Studio ortamından biraz bahsedelim. Visual Studio

Detaylı

Mühendislik Fakültesi Elektrik-Elektronik Mühendisliği C Programlama 1. Bölüm C# Programlamaya Giriş

Mühendislik Fakültesi Elektrik-Elektronik Mühendisliği C Programlama 1. Bölüm C# Programlamaya Giriş Mühendislik Fakültesi Elektrik-Elektronik Mühendisliği C Programlama 1. Bölüm C# Programlamaya Giriş C Programlama Dr. Serkan DİŞLİTAŞ 1.1. C# ile Program Geliştirme.Net Framework, Microsoft firması tarafından

Detaylı

VERİ TABANI NEDİR A. TABLO OLUŞTURMA

VERİ TABANI NEDİR A. TABLO OLUŞTURMA VERİ TABANI NEDİR Belli bir amaca dayalı ortak alanlara (ad soyad, ürün adı, fiyatı gibi) sahip kişilerin ve nesnelerin bilgilerinin tutulduğu, istendiğinde bu bilgiler için arama, düzeltme, silme, kayıt

Detaylı

NAZMİYE DEMİREL ORTAOKULU BİLİŞİM TEKNOLOJİLERİ DERSİ 1. DÖNEM 6. SINIFLAR DERS NOTU EXCEL 2007 DERS NOTLARI

NAZMİYE DEMİREL ORTAOKULU BİLİŞİM TEKNOLOJİLERİ DERSİ 1. DÖNEM 6. SINIFLAR DERS NOTU EXCEL 2007 DERS NOTLARI EXCEL 2007 DERS NOTLARI Bir hesap tablosu programıdır. Excel, her türlü veriyi (özellikle sayısal verileri) tablolar ya da listeler halinde tutma ve bu verilerle ilgili ihtiyaç duyacağınız tüm hesaplamaları

Detaylı

Toplama işlemi için bir ikili operatör olan artı işareti aynı zamanda tekli operatör olarak da kullanılabilir.

Toplama işlemi için bir ikili operatör olan artı işareti aynı zamanda tekli operatör olarak da kullanılabilir. www.csharpturk.net Türkiye nin C# Okulu Yazar Yunus Özen Eposta yunus@yunus.gen.tr Tarih 08.04.2006 Web http://www.yunusgen.tr ARİTMETİK OPERATÖRLER VE KULLANIM ŞEKİLLERİ Bilgisayarlar yapıları gereği,

Detaylı

Kabuk Programlama (Bash)

Kabuk Programlama (Bash) Kabuk Programlama (Bash) Erkan Esmer Ocak, 2013 İçindekiler 1 Giriş.................................................... 2 2 Kabuk(Shell)............................................... 3 3 Çekirdek(Kernel).............................................

Detaylı

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

Uzaktan Eğitim Uygulama ve Araştırma Merkezi JAVA PROGRAMLAMA Öğr. Gör. Utku SOBUTAY İÇERİK 2 Java da Fonksiyon Tanımlamak Java da Döngüler Java da Şart İfadeleri Uygulamalar Java da Fonksiyon Tanımlamak JAVA DA FONKSİYON TANIMLAMAK 4 Fonksiyonlar;

Detaylı

2) Hesabınıza Giriş yaptıktan sonra aşağıdaki ekran karşınıza gelir.

2) Hesabınıza Giriş yaptıktan sonra aşağıdaki ekran karşınıza gelir. MEB.K12.TR Uzantılı E-Posta Hesabının Kullanımı 1) http://mail.meb.k12.tr internet adresinden e-posta hesabına giriş yapılır. Kullanıcı Adı : KURUM KODUNUZ (meb.k12.tr kısmını yazmayınız.) Şifre : Hesabınıza

Detaylı

2.50 VERSİYONUMUZDA YER ALACAK, YENİ TEORİK DERS PROGRAMI KILAVUZU

2.50 VERSİYONUMUZDA YER ALACAK, YENİ TEORİK DERS PROGRAMI KILAVUZU 2.50 VERSİYONUMUZDA YER ALACAK, YENİ TEORİK DERS PROGRAMI KILAVUZU 1 ĐÇĐNDEKĐLER 1. Teorik Ders Programı Hazırlık Aşamaları ve Kontroller... 3 2. Personel ve Derslikler.... 4 3. Teorik Program Đçin Grup

Detaylı

SIMAN KULLANIM KILAVUZU

SIMAN KULLANIM KILAVUZU SIMAN KULLANIM KILAVUZU Önder Öndemir SIMAN Simülasyon programı Model Çatı ve Deneysel Çatı olmak üzere iki kısımdan oluşur. Model çatı genel itibariyle modullerin ve işlem bloklarının yazıldığı kısımdır.

Detaylı

BİLGİSAYAR BİLİMİ DERSİ (KUR 1) PYTHON PROGRAMLAMA DİLİ ÇALIŞMA KÂĞIDI - 1

BİLGİSAYAR BİLİMİ DERSİ (KUR 1) PYTHON PROGRAMLAMA DİLİ ÇALIŞMA KÂĞIDI - 1 BİLGİSAYAR BİLİMİ DERSİ (KUR 1) PYTHON PROGRAMLAMA DİLİ ÇALIŞMA KÂĞIDI - 1 Ekrana Metin Yazdırmak Ekranda metin yazdırmak istendiğinde print komutu kullanılır. Kullanımı aşağıda verilmiştir. Parantez içinde

Detaylı

Burada a değişkeninin türü integer olarak verildi. Peki biz bu ifadeyi tırnak içerisinde yazarsak ne olur?

Burada a değişkeninin türü integer olarak verildi. Peki biz bu ifadeyi tırnak içerisinde yazarsak ne olur? STRİNG (KARAKTER) İŞLEMLERİ Python'da karakter dizilerini ifade etmek için yapmamız gereken tek şey, ifademizi tırnak ("") içinde belirtmektir. Python'da tırnak içerisinde belirtilen her şey karakter dizisi

Detaylı

ELN1001 BİLGİSAYAR PROGRAMLAMA I

ELN1001 BİLGİSAYAR PROGRAMLAMA I ELN1001 BİLGİSAYAR PROGRAMLAMA I DEPOLAMA SINIFLARI DEĞİŞKEN MENZİLLERİ YİNELEMELİ FONKSİYONLAR Depolama Sınıfları Tanıtıcılar için şu ana kadar görülmüş olan özellikler: Ad Tip Boyut Değer Bunlara ilave

Detaylı

// hataları işaret eden referans

// hataları işaret eden referans System sınıfı java.lang.object java.lang.system public final class System extends Object System sınıfı, java.lang paketi içindedir. Platformdan bağımsız olarak sistem düzeyindeki eylemleri belirleyen dingin

Detaylı

C Programlama Dilininin Basit Yapıları

C Programlama Dilininin Basit Yapıları Bölüm 2 C Programlama Dilininin Basit Yapıları İçindekiler 2.1 Sabitler ve Değişkenler......................... 13 2.2 Açıklamalar (Expresions)........................ 14 2.3 İfadeler (Statements) ve İfade

Detaylı

if (ad == "Sabri") Console.WriteLine("Merhaba Sabri. Ne zamandır gözükmüyodun...");

if (ad == Sabri) Console.WriteLine(Merhaba Sabri. Ne zamandır gözükmüyodun...); Koşul İfadeleri ve Akış Kontrolü Koşul ifadeleri ve akış kontrolleri programlama dillerinde her zaman en önemli yeri tutmaktadır. Yazdığımız uygulamanın hangi koşulda nasıl davranacağını belirterek bir

Detaylı

İÇERİK 2 Java Kodlaması için Gerekli Programlar JRE, JDK kurulması ve Başlangıç Ayarları Java Kodlamayı Kolaylaştıran IDE ler Java Kod Yapısı İlk Java

İÇERİK 2 Java Kodlaması için Gerekli Programlar JRE, JDK kurulması ve Başlangıç Ayarları Java Kodlamayı Kolaylaştıran IDE ler Java Kod Yapısı İlk Java JAVA KODLAMAYA GİRİŞ Öğr. Gör. Utku SOBUTAY İÇERİK 2 Java Kodlaması için Gerekli Programlar JRE, JDK kurulması ve Başlangıç Ayarları Java Kodlamayı Kolaylaştıran IDE ler Java Kod Yapısı İlk Java Programı

Detaylı

Sunum İçeriği. Programlamaya Giriş 22.03.2011

Sunum İçeriği. Programlamaya Giriş 22.03.2011 Programlamaya Giriş Nesne Tabanlı Programlamaya Giriş ve FONKSİYONLAR Sunum İçeriği Nesne Tabanlı Programlama Kavramı Fonksiyon tanımlama ve kullanma Formal Parametre nedir? Gerçel Parametre nedir? Fonksiyon

Detaylı

7.1- C#.net Giriş Çıkış İşlemleri ve Visual Studio. M.İLKUÇAR - 1

7.1- C#.net Giriş Çıkış İşlemleri ve Visual Studio. M.İLKUÇAR - 1 7.1- C#.net Giriş Çıkış İşlemleri ve Visual Studio M.İLKUÇAR - imuammer@yahoo.com 1 7- PROGRAMLAMAYA GİRİŞ 7.12- C#.NET I/O (Giriş / Çıkış Komutları- fonksiyonları) : I (Input) Giriş O (Output) Çıkış Klavyeden

Detaylı

MEB E-Posta Hizmetleri ve Outlook Programı

MEB E-Posta Hizmetleri ve Outlook Programı MEB E-Posta Hizmetleri ve Outlook Programı İçindekiler Bakanlık E-Posta Hizmetleri ve Sistem Ara yüzü E-posta Hizmetlerinin Outlook Programına Bağlanması Outlook 2010 Kullanımına ilişkin temel bilgiler

Detaylı

1. HAFTA KBT204 İNTERNET PROGRAMCILIĞI II. Öğr.Gör. Hakan YILMAZ. hakanyilmaz@karabuk.edu.tr

1. HAFTA KBT204 İNTERNET PROGRAMCILIĞI II. Öğr.Gör. Hakan YILMAZ. hakanyilmaz@karabuk.edu.tr 1. HAFTA KBT204 İNTERNET PROGRAMCILIĞI II Öğr.Gör. Hakan YILMAZ hakanyilmaz@karabuk.edu.tr Karabük Üniversitesi Uzaktan Eğitim Uygulama ve AraştırmaMerkezi 2 İçindekiler 1. GİRİŞ... 3 1.1 ASP NEDİR?...

Detaylı

ASP.NET ile Bir Web Sitesi Oluşturma

ASP.NET ile Bir Web Sitesi Oluşturma 29,30 Eylül 2011 ASP.NET ile Bir Web Sitesi Oluşturma ASP.NET sitesi oluşturmak için File menüsündeki, New açılır listesindeki, Web Site komutuna tıklıyoruz Açılan pencereden C# içindeki ASP.NET Web Site

Detaylı

C# nedir,.net Framework nedir?

C# nedir,.net Framework nedir? 1 C# nedir,.net Framework nedir? C# nedir? C#, C/C++ ve Java dillerinde türetilmiş,bu dillerin dezavantajlarının elenip iyi yönlerinin alındığı, güçlü basit, esnek, tip-güvenli(typesafe,tür dönüşümlerindeki

Detaylı

Programlama Dillerinde Kullanılan Veri Tipleri

Programlama Dillerinde Kullanılan Veri Tipleri Programlama Dillerinde Kullanılan Veri Tipleri Taban/Biçim Basic Paskal C/C++/C#/Java 10 (Decimal ) - - - 16 (Hexadecimal) &hsayı veya &Hsayı $sayı 0xsayı veya 0Xsayı Üstel eüs veya Eüs eüs veya Eüs eüs

Detaylı

HSancak Nesne Tabanlı Programlama I Ders Notları

HSancak Nesne Tabanlı Programlama I Ders Notları ComboBox Bir Windows açılan kutu sunu temsil eder. ComboBox kontrolü, kullanıcıların bazı değerleri açılan bir listeden seçmesini sağlar. Listeye tasarım anında veya çalışma anında öğe eklenebilir. Listeye

Detaylı

Data Structures Lab 1 2012-Güz

Data Structures Lab 1 2012-Güz Data Structures Lab 1 2012-Güz C# Ortamı Tanıtımı ve Uygulama Geliştirilmesi Visual Studio 2010 Ortamının Temini -NYG'ndan MSDN üyeliği için başvuru dilekçesi alınıp doldurulmalı ve yine NYG'ye teslim

Detaylı

PROGRAMLAMAYA GİRİŞ. Öğr. Gör. Ayhan KOÇ. Kaynak: Algoritma Geliştirme ve Programlamaya Giriş, Dr. Fahri VATANSEVER, Seçkin Yay.

PROGRAMLAMAYA GİRİŞ. Öğr. Gör. Ayhan KOÇ. Kaynak: Algoritma Geliştirme ve Programlamaya Giriş, Dr. Fahri VATANSEVER, Seçkin Yay. PROGRAMLAMAYA GİRİŞ Öğr. Gör. Ayhan KOÇ Kaynak: Algoritma Geliştirme ve Programlamaya Giriş, Dr. Fahri VATANSEVER, Seçkin Yay., 2007 Algoritma ve Programlamaya Giriş, Ebubekir YAŞAR, Murathan Yay., 2011

Detaylı

Temel Bilgisayar Uygulamaları Web Tasarımı, Programlama Dilleri ve C# a Giriş

Temel Bilgisayar Uygulamaları Web Tasarımı, Programlama Dilleri ve C# a Giriş Kitap: Örneklerle Algoritma ve C# Programlama - Erhan Arı C# Giriş C# yazmak için Windows ta Visual Studio, Mac te Xamarin Studio kullanırız. Bi C# Projesi oluşturmak için Visual Studio da: File(Dosya)->New

Detaylı

HSancak Nesne Tabanlı Programlama I Ders Notları

HSancak Nesne Tabanlı Programlama I Ders Notları SABİTLER VE DEĞİŞKENLER Değişken, verilerin bellekte geçici olarak kaydedilmesini ve gerektiğinde kullanılmasını sağlayan değerdir. Nesne tabanlı programlama dilinde değişken kullanımı diğer programlama

Detaylı

GtkD ile Görsel Programlama

GtkD ile Görsel Programlama GtkD ile Görsel Programlama Yazar: Mengü KAĞAN & Can Alpay ÇİFTÇİ www.tdsoftware.tr.cx Sıra GtkD'ye geldiğine göre D hakkında ciddi bir bilgiye sahipsiniz demektir. Eğer eksikleriniz varsa mutlaka D derslerini

Detaylı

Bolum 9. Konu Başlıkları

Bolum 9. Konu Başlıkları Bolum 9 Konu Başlıkları 1.Grafik Arayüz Tasarımı//Pencere Araçları(Widgets) Label Button Enrty Checkbutton Toplevel Listbox Menu Text Bitmap Herhangi bir pencere üzerinde bulunan düğmeler,etiketler,sağa-sola,yukarı-aşağı

Detaylı

Bilgisayarda Programlama. Temel Kavramlar

Bilgisayarda Programlama. Temel Kavramlar Bilgisayarda Programlama Temel Kavramlar KAVRAMLAR Programlama, yaşadığımız gerçek dünyadaki problemlere ilişkin çözümlerin bilgisayarın anlayabileceği bir biçime dönüştürülmesi / ifade edilmesidir. Bunu

Detaylı

SM 100 Terazi Ayarları. Digi SM 100. SM 100 Terazi Ayarları

SM 100 Terazi Ayarları. Digi SM 100. SM 100 Terazi Ayarları Digi SM 100 SM 100 Terazi Ayarları Digi SM 100 Terazi Ayarları Teraziyi ayarlamaya başlamak için öncelikle X S Z ENTER Raporlar Program Ayarlar FONKSIYON Bölümlerine geçiş yapabilmemiz gerekmektedir. Bunun

Detaylı

Problem Yaklaşım Temelleri, Algoritma ve Akış Şeması

Problem Yaklaşım Temelleri, Algoritma ve Akış Şeması 1 Problem Yaklaşım Temelleri, Algoritma ve Akış Şeması Problem Bireylerin yaşadığı çevreye uyum sağlaması durumunda ortaya çıkan olumsuzluklar ve çatışmalar problem olarak değerlendirilir. Bu durumdaki

Detaylı

Dizi elemanları yukarıdaki gibi tek tek tanımlanabileceği gibi matematiksel ifadelerdeki diziler gibi de tanımlanabilir.

Dizi elemanları yukarıdaki gibi tek tek tanımlanabileceği gibi matematiksel ifadelerdeki diziler gibi de tanımlanabilir. DİZİLER/ARRAY: Dizi yi çeşitli şekillerde tanımlamak mümkün. Dizi içlerinde birden fazla değer saklayabilen veri kümeleridir diye tanımlarsak uygun olur sanırım. Diziler yan yana dizilmiş kutucuklar olarak

Detaylı

Masa üstünde vt34.mdb dosyası var, onu projemize eklemek için, App_Data ya sağ tıkla Add Existing Item vt34.mdb adlı dosyayı seç Add

Masa üstünde vt34.mdb dosyası var, onu projemize eklemek için, App_Data ya sağ tıkla Add Existing Item vt34.mdb adlı dosyayı seç Add 29 Aralık 2011 / Perşembe Visual studio dan veri tabanından veri çekmek için önce bir aspx dosyası açıp,,accessde yeni veri tabanı dosyası açıyoruz. Dikkat : Dosyanın uzantısı.mdb olacak. Masa üstünde

Detaylı

ASSAM YÖNERGESİNE EK-T ASSAM WEB SİTESİ YÖNERGESİNE LAHİKA-2 WEB SİTESİ MAKALE EKLEME KILAVUZU 8.4.2014. www.assam.org.tr ASSAM

ASSAM YÖNERGESİNE EK-T ASSAM WEB SİTESİ YÖNERGESİNE LAHİKA-2 WEB SİTESİ MAKALE EKLEME KILAVUZU 8.4.2014. www.assam.org.tr ASSAM YÖNERGESİNE EK-T ASSAM WEB SİTESİ YÖNERGESİNE LAHİKA-2 WEB SİTESİ MAKALE EKLEME KILAVUZU 8.4.2014 ASSAM İçindekiler Önsöz... 3 ASSAM Web Sitesinde Makale Yayınlamak... 4 ASSAM Web Sitesine Nasıl Girerim?...

Detaylı

2007-2008 Bahar. BM 211 Programlama Dilleri 3 1

2007-2008 Bahar. BM 211 Programlama Dilleri 3 1 Programlama Dilleri III 2007-2008 Bahar BM 211 Programlama Dilleri 3 1 Ders Hakkında Ders Sorumlusu Öğr.Gör. Bora UĞURLU Ders Slaytları İçin http://members.comu.edu.tr/boraugurlu/ Dersle İlgili İletişim

Detaylı

2. Belgeye Metin Ekleme

2. Belgeye Metin Ekleme METİN İŞLEMLERİ Flashta 2 çeşit metin vardır:1)tlf metni 2)Klasik metin 1)TLF Metni : CS5 ile başlayan metin türü. TLF metni FLA dosyanızın yayınlama ayarlarında ActionScript 3.0 ve Flash Player 10 veya

Detaylı

1. TANIMLAR 1.1 Laboratuvarım

1. TANIMLAR 1.1 Laboratuvarım 1. TANIMLAR 1.1 Laboratuvarım Laboratuvarımızda bulunan analizörleri, çalıştığımız dış kalite değerlendirme (DKD) programlarını ve sonuç göndereceğimiz testlerimizi tanımlayacağımız bu kısma Tanımlar menüsü

Detaylı

Metin İşlemleri, Semboller

Metin İşlemleri, Semboller Ankara Üniversitesi Nallıhan Meslek Yüksekokulu Metin İşlemleri, Semboller NBP108 - GRAFİK ANİMASYON il Öğr.Gör. Salih ERDURUCAN 1 / 13 3. METİN İŞLEMLERİ 3.1. Metin Aracı Animasyon yazılımı yazı yazmak

Detaylı

BİL BİLGİSAYAR PROGRAMLAMA (JAVA)

BİL BİLGİSAYAR PROGRAMLAMA (JAVA) BİL 141 - BİLGİSAYAR PROGRAMLAMA (JAVA) KURULUM DÖKÜMANI Ders kapsamında lab saatlerinde veya lab saatleri dışında Java kodları yazabilmek ve çalıştırabilmek için bilgisayarınıza bazı yazılımların kurulması

Detaylı

Öğr. Gör. Serkan AKSU http://www.serkanaksu.net. http://www.serkanaksu.net/ 1

Öğr. Gör. Serkan AKSU http://www.serkanaksu.net. http://www.serkanaksu.net/ 1 Öğr. Gör. Serkan AKSU http://www.serkanaksu.net http://www.serkanaksu.net/ 1 JavaScript JavaScript Nedir? Nestcape firması tarafından C dilinden esinlenerek yazılmış, Netscape Navigator 2.0 ile birlikte

Detaylı

Fotolia Microsoft PowerPoint 2007-2010 Eklentisi Kurulum Kılavuzu Versiyon 1.0

Fotolia Microsoft PowerPoint 2007-2010 Eklentisi Kurulum Kılavuzu Versiyon 1.0 Fotolia Microsoft PowerPoint 2007-2010 Eklentisi Kurulum Kılavuzu Versiyon 1.0 Kurulum Kılavuzu 1 İçindekiler Fotolia Microsoft PowerPoint 2007-2010 Eklentisi...1 Kılavuz Hakkında...3 Kılavuzun Amacı...3

Detaylı

Fotolia Microsoft Word 2007-2010 Eklentisi Kurulum Kılavuzu Versiyon 1.0

Fotolia Microsoft Word 2007-2010 Eklentisi Kurulum Kılavuzu Versiyon 1.0 Fotolia Microsoft Word 2007-2010 Eklentisi Kurulum Kılavuzu Versiyon 1.0 Kurulum Kılavuzu 1 İçindekiler Fotolia Microsoft Word 2007-2010 Eklentisi...Error! Bookmark not defined. Kılavuz Hakkında...Error!

Detaylı

İSTANBUL ECZACI ODASI BİLGİ İŞLEM BİRİMİ - 2010 -

İSTANBUL ECZACI ODASI BİLGİ İŞLEM BİRİMİ - 2010 - İSTANBUL ECZACI ODASI BİLGİ İŞLEM BİRİMİ - 2010 - İnternet Explorer sayfasını açınız. Adres çubuğuna http://arsiv.ieo.org.tr adresini yazarak klavyeden Enter tuşuna basınız. (1) Açılacak olan sayfadan

Detaylı

MVC. Görüldüğü üzere 2 adet cs. Dosyası oluşturdum. Birincisi çok satır kodu (20-25) içeren büyük işlerin yapılacağı class. İsmi buyuk_isler.

MVC. Görüldüğü üzere 2 adet cs. Dosyası oluşturdum. Birincisi çok satır kodu (20-25) içeren büyük işlerin yapılacağı class. İsmi buyuk_isler. MVC MVC Anlamakta zorluk çekiyorsanız bu yazımı dikkatle okumanızı tavsiye ediyorum. Derslerde öğrencilerimin en çok zorlandıkları konu MVC nin mantığıdır. Önce MVC anlamaya çalışmak yerine MVC den biraz

Detaylı

Hukuk Parter ile SMS Yönetimi

Hukuk Parter ile SMS Yönetimi Hukuk Parter ile SMS Yönetimi Hukuk Partner ile SMS Yönetimi İÇİNDEKİLER Hukuk Partner ile SMS Yönetimi... 3 SMS Gönderimi ile ilgili Tanımlamalar... 3 SMS Gönderimine ilişkin yetkiler... 3 SMS Hesabı

Detaylı

e-imzatr Kurulum Klavuzu

e-imzatr Kurulum Klavuzu e-imzatr Kurulum Klavuzu Sürüm 0.0.1 1 İçindekiler İşletim Sistemi Sistem Türü Öğrenme Java yükleme Akis Kurulum Kart Okuyucu Sürücü Kurulum Kullanıcı Doğrulama 2 İşletim Sistemi Sistem Türü Öğrenme Bu

Detaylı

Hızlı Başlangıç Kılavuzu

Hızlı Başlangıç Kılavuzu Hızlı Başlangıç Kılavuzu Microsoft Access 2013 önceki sürümlerden farklı görünmektedir, dolayısıyla öğrenme eğrisini en aza indirmenize yardımcı olmak üzere bu kılavuzu hazırladık. Ekran boyutunu değiştirme

Detaylı

HESAP MAKİNASI YAPIMI

HESAP MAKİNASI YAPIMI HESAP MAKİNASI YAPIMI 1..Aşağıdakine benzer görünüm ve butonları hazırlayın. 2. 24. Butonun içerisine aşağıdaki kodları yazın. 3. Yeni bir layer ekleyip Frame1 F9 na aşağıdaki kodları ekleyelim. 4. Butonlardan

Detaylı

İNTERNET PROGRAMCILIĞI - II

İNTERNET PROGRAMCILIĞI - II 0 İÇİNDEKİLER Bölüm 1 PHP İle Web Programlamaya Giriş 1 Bölüm 2 PHP Kodlama Standartları 5 Bölüm 3 PHP Değişken Kullanımı 17 Bölüm 4 IF Yapısı 32 Bölüm 5 Döngüler ve Diziler 64 1 BÖLÜM 1 PHP İLE WEB PROGRAMLAMAYA

Detaylı

T.C. istanbul ÜNiVERSiTESi ÖĞRENCi BiLGi SiSTEMi. ÖĞRETiM ELEMANI KULLANIM KILAVUZU

T.C. istanbul ÜNiVERSiTESi ÖĞRENCi BiLGi SiSTEMi. ÖĞRETiM ELEMANI KULLANIM KILAVUZU T.C. istanbul ÜNiVERSiTESi ÖĞRENCi BiLGi SiSTEMi ÖĞRETiM ELEMANI KULLANIM KILAVUZU 1 1. Sisteme Giriş Nokta Üniversite Otomasyonu sistemini kullanabilmek için öncelikle Windows işletim sisteminde bulunan

Detaylı

ALGORİTMA TASARIMI VE SCRATCH UYGULAMASI

ALGORİTMA TASARIMI VE SCRATCH UYGULAMASI NOT: Çalışma kâğıtları Algoritma Tasarımı ve Excel olmak üzere 2 kısımdan oluşmakta ve sınavda her ikisinin de çalışılması gerekmektedir. ALGORİTMA TASARIMI VE SCRATCH UYGULAMASI Bu çalışma sayfalarında

Detaylı

ASP.NET CLASS KULLANARAK VERİTABANI İŞLEMLERİ

ASP.NET CLASS KULLANARAK VERİTABANI İŞLEMLERİ ASP.NET CLASS KULLANARAK VERİTABANI İŞLEMLERİ Asp.NET mimarisinin temelini oluşturan CLASS yapısını kullanarak veri tabanı işlemlerini nasıl daha az kodla ve daha stabil yapabiliriz bunu göreceğiz. Mevzu

Detaylı

4- Turbo Pascal Bilgisayar Programlamada Kullanılan Şart Yapıları

4- Turbo Pascal Bilgisayar Programlamada Kullanılan Şart Yapıları 4- Turbo Pascal Bilgisayar Programlamada Kullanılan Şart Yapıları Şart yapıları bir bilgisayar programının olmazsa olmazlarındandır. Şart yapıları günlük hayatımızda da çok fazla karşılaştığımız belirli

Detaylı

KELİME İŞLEMCİ MİCROSOFT OFFİCE WORD KULLANIMI

KELİME İŞLEMCİ MİCROSOFT OFFİCE WORD KULLANIMI KELİME İŞLEMCİ MİCROSOFT OFFİCE ŞEKİL EKLEMEK Sayfaya menüdeki şekilleri ekleyebiliriz. 1 ŞEKİL EKLEME UYGULAMASI Sayfaya yukarıdaki şekilleri ekleyin. WORDART EKLEMEK Sayfaya 3 boyutlu yazı ekleyebiliriz.

Detaylı

VISUAL BASIC DE İŞLETİM SİSTEMİ DENETİM KOMUTLARI VE FONKSİYONLARI

VISUAL BASIC DE İŞLETİM SİSTEMİ DENETİM KOMUTLARI VE FONKSİYONLARI VISUAL BASIC DE İŞLETİM SİSTEMİ DENETİM KOMUTLARI VE FONKSİYONLARI Visual basic kodları yazılırken, yapılması istenen işlerin yanı sıra sistem ile ilgili bazı işlerin yapılması da (klasör oluşturma silme,

Detaylı

U y g u l a m a A i l e s i (Abakus 360, T-Panel, T-CRM) Tarayıcı Ayarları. IPera İletişim Teknolojileri

U y g u l a m a A i l e s i (Abakus 360, T-Panel, T-CRM) Tarayıcı Ayarları. IPera İletişim Teknolojileri U y g u l a m a A i l e s i (Abakus 360, T-Panel, T-CRM) Tarayıcı Ayarları Başlarken İletişim yönetimi için gerekli tüm araçları sunan OfisTelefonu 07 programları Abakus 360, T-Panel ve T-CRM, bir kuruluştaki

Detaylı

DATA STRUCTURES. Lab II Metotlar, Diziler ve Hata Ayıklama. Doç. Dr. Aybars UĞUR

DATA STRUCTURES. Lab II Metotlar, Diziler ve Hata Ayıklama. Doç. Dr. Aybars UĞUR DATA STRUCTURES Lab II Metotlar, Diziler ve Hata Ayıklama Doç. Dr. Aybars UĞUR İçerik Debugging konusunun kısaca anlatımı. (10 dk.) F11, F10 ve Durma Noktası denemeleri yapılması ve gözlemlerin not edilmesi.

Detaylı

DÖNGÜLER (LOOPS) while(), do-while(), for(), foreach()

DÖNGÜLER (LOOPS) while(), do-while(), for(), foreach() (LOOPS) while(), do-while(), for(), foreach() Döngüler (loops) while do-while for foreach while ( koşul ) işlemler; do işlemler; while (koşul ); for (başlangıç ; koşul ; arttırma) işlemler; foreach ( tip

Detaylı

Ders 8: Metotlar. barisgokce.com

Ders 8: Metotlar. barisgokce.com Ders 8: Metotlar Hazırlayan : Öğr. Grv.. Barış GÖKÇE Đletişim im : www.barisgokce barisgokce.com Metotlar C# içerisinde bir veya birden fazla kod bulunduran kod bloklarıdır. Bir nesnenin veya sınıfın programı

Detaylı

JAL IN İNTERNET TEN İNDİRİLMESİ VE KURULMASI

JAL IN İNTERNET TEN İNDİRİLMESİ VE KURULMASI JAL IN İNTERNET TEN İNDİRİLMESİ VE KURULMASI WINDOWS TA JAL IN İNDİRİLMESİ VE KURULMASI JAL derleyicisi aslında Jal.exe isimli tek bir dosyadan oluşur. Jal.exe derleyici programı, yazılan JAL programı

Detaylı

HSancak Nesne Tabanlı Programlama I Ders Notları

HSancak Nesne Tabanlı Programlama I Ders Notları DİZİLER Bellekte ard arda yer alan aynı türden nesneler kümesine dizi (array) denilir. Bir dizi içerisindeki bütün elemanlara aynı isimle ulaşılır. Yani dizideki bütün elemanların isimleri ortaktır. Elemanlar

Detaylı

DATA STRUCTURES. Lab II Metotlar, Diziler ve Hata Ayıklama. Prof. Dr. Aybars UĞUR

DATA STRUCTURES. Lab II Metotlar, Diziler ve Hata Ayıklama. Prof. Dr. Aybars UĞUR DATA STRUCTURES Lab II Metotlar, Diziler ve Hata Ayıklama İçerik Debugging konusunun kısaca anlatımı. (10 dk.) F11, F10 ve Durma Noktası denemeleri yapılması ve gözlemlerin not edilmesi. (10 dk.) Örnek2

Detaylı

Okuyarak kelime öğrenmenin Yol Haritası

Okuyarak kelime öğrenmenin Yol Haritası Kelime bilgimin büyük bir miktarını düzenli olarak İngilizce okumaya borçluyum ve biliyorsun ki kelime bilmek akıcı İngilizce konuşma yolundaki en büyük engellerden biri =) O yüzden eğer İngilizce okumuyorsan,

Detaylı

Genel Açıklama: Bu çalışmanın kullanıcılarıma yararlı olmasını temenni ederiz. Saygılarımızla, 15 Ekim 2012 Datasoft Yazılım

Genel Açıklama: Bu çalışmanın kullanıcılarıma yararlı olmasını temenni ederiz. Saygılarımızla, 15 Ekim 2012 Datasoft Yazılım Datasoft Yazılım Personel Bordrosu Programı Kanuni Raporlar Menüsünde Aynı Đşyeri Đçin Birden Fazla Aylık Prim ve Hizmet Belgesi XML Dosyasını Bir Defada Hazırlayıp, SGK E-Bildirge Sitesine Gönderilmesini

Detaylı

SAB 103 TEMEL BİLGİSAYAR KULLANIMI

SAB 103 TEMEL BİLGİSAYAR KULLANIMI SAB 103 TEMEL BİLGİSAYAR KULLANIMI Kelime İşlemci - Word Prof.Dr. Fatih TANK Ankara Üniversitesi Uygulamalı Bilimler Fakültesi Sigortacılık ve Aktüerya Bilimleri Bölümü Prof.Dr. Fatih TANK - Temel - Ders

Detaylı

Yeni bir proje açarken File New - Web Site diyoruz. Gelen ekranda Visual Basic veya C# seçilebilir. Biz ders kapsamında C# programlama dilini seçtik.

Yeni bir proje açarken File New - Web Site diyoruz. Gelen ekranda Visual Basic veya C# seçilebilir. Biz ders kapsamında C# programlama dilini seçtik. ASP.NET DERS 1 Yeni bir proje açarken File New - Web Site diyoruz. Gelen ekranda Visual Basic veya C# seçilebilir. Biz ders kapsamında C# programlama dilini seçtik. Gelen ekranda Visual C# seçildikten

Detaylı

Verimlilik İçin ETKİN BİLGİ YÖNETİMİ KENDİ FONKSİYONUMUZU YAZALIM

Verimlilik İçin ETKİN BİLGİ YÖNETİMİ KENDİ FONKSİYONUMUZU YAZALIM Verimlilik İçin ETKİN BİLGİ YÖNETİMİ KENDİ FONKSİYONUMUZU YAZALIM Lütfen Dikkat! Bu kitapta herhangi bir şekilde adı geçen ürün, marka veya şirket isimleri sahiplerine aittir. Kitapta yer alan bilgilerin

Detaylı

Bil101 Bilgisayar Yazılımı I. M. Erdem ÇORAPÇIOĞLU Bilgisayar Yüksek Mühendisi

Bil101 Bilgisayar Yazılımı I. M. Erdem ÇORAPÇIOĞLU Bilgisayar Yüksek Mühendisi Bil101 Bilgisayar Yazılımı I Bilgisayar Yüksek Mühendisi Editör Disk 1)Kaynak kodlar editör aracılığı ile oluşturulur. (.c) Kaynak dosya Önişleyici Disk 2)Önişleyici kodlar içerisindeki ilk işleme işini

Detaylı

Bilgisayar. Bilgisayarın Özellikleri. Giriş İşleme Çıkış. Bilgisayar Nedir? Bilgisayarın Çalışma Prensibi 11.11.2013

Bilgisayar. Bilgisayarın Özellikleri. Giriş İşleme Çıkış. Bilgisayar Nedir? Bilgisayarın Çalışma Prensibi 11.11.2013 Bilgisayar Bilgisayar Nedir? Kullanıcı tarafından girilen veriyi, bilgiyi, komutu programlandığı biçimde işleyip kullanılabilir bilgi veya anlaşılabilir sonuç haline dönüştüren ve bunları saklayabilen

Detaylı

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

Uzaktan Eğitim Uygulama ve Araştırma Merkezi JAVA PROGRAMLAMA Öğr. Gör. Utku SOBUTAY İÇERİK 2 Java da Kapsülleme (Erişim Denetleyiciler) Java da Sınıf Oluşturmak Java da Nesne Oluşturmak Java da Constructor Kavramı Java da This Kavramı Java da Constructor

Detaylı

e-imzatr Kurulum Klavuzu

e-imzatr Kurulum Klavuzu e-imzatr Kurulum Klavuzu Sürüm 0.0.1 İçindekiler İşletim Sistemi Sistem Türü Öğrenme Java yükleme Akis Kurulum Kullanıcı Doğrulama İşletim Sistemi Sistem Türü Öğrenme Bu başlıkta bilgisayarımızın mevcut

Detaylı

D218 Sosyal Siyaset: Sosyal Yardım, Güç ve Çeşitlilik CDA1: CDA5613

D218 Sosyal Siyaset: Sosyal Yardım, Güç ve Çeşitlilik CDA1: CDA5613 D218 Sosyal Siyaset: Sosyal Yardım, Güç ve Çeşitlilik CDA1: CDA5613 Bölüm 2 Clarke Bu programda D218 ya da bir başka derse çalışmak için en önemli becerilerden birini konuşacağız. Konumuz, not tutmak.

Detaylı

Bağlantılar dışarıdan alınan verilerin (bu farklı Excel dosyası da olabilir) özelliklerini düzenlemek ve verilerin son halini almak için kullanılır.

Bağlantılar dışarıdan alınan verilerin (bu farklı Excel dosyası da olabilir) özelliklerini düzenlemek ve verilerin son halini almak için kullanılır. MICROSOFT EXCEL 2010 Tekno-K@mp Eğitim ID 1 Seviye 2/4 (Normal Seviye Kullanıcı) Tekno-K@mp Konu ID 23 Ana Kategori Menüler / Sekmeler Alt Kategori Veri Sekmesi Konu Veri Araçları ve Anahat Grupları Ek

Detaylı