Visual Studio 2008 etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
Visual Studio 2008 etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

10 Nisan 2010 Cumartesi

ASP.NET - Xml WebServices (2 - Uygulamalı Örnek)

Tekrar merhaba,

Bu makale de basit bir Web Service yazıp nasıl kullanıldığını bir örnek üzerinde görmeye çalışacağız. Bir önceki yazımda anlattığım üzere çeşitli nedenlerden dolayı Web Service kullanma ihtiyacı ortaya çıkabilir. Peki nasıl ve nereden başlamalı? Gelin hep birlikte sıfırdan bir proje oluşturalım.

Servis'i yazmadan önce Web Service'leri ile ilgili biraz hatırlatma yapmak isterim. Web Service'ler daha doğrusu Xml Web Service'ler adı üstüne Xml (eXtensible Markup Language) yapısını taşıdığı için data gönderim ve almada bize kolaylıklar sağlarlar. Bu kolaylığı sağlamaları için kullandıkları bazı protokoller vardır. Xml Web Service'leri de Xml tabanlı olduklarından SOAP (Simple Object Access Protocol, Basit Nesne Erişim Protokolü) protokol'ünü kullanırlar.

SOAP protokolünde taşınacak her bir datanın belli bir standartta olması gerekir. Bunun için SOAP ile taşınan bir datayı üç aşamada inceleyebiliriz.

Envelope - Header - Body

Envelope : Bu yapının en geniş kümesidir. Şekilde de görüldüğü gibi her bir SOAP Envelope'u bünyesinde Header ve Body'i içermelidir.

Header : Gönderilecek olan datanın ön bilgisini taşır.
Body : Gönderilecek olan datanın içeriğini taşır.


Artık projeyi geliştirmeye başlayabiliriz. Her zaman ki gibi Visual Studio arayüzünden yeni ve boş bir Solution oluşturuyorum. İsmide blogWebService olsun. Bu Solution'ıma bir adet Web Service ve bir adet de bu Web Service'i tüketecek yani test edeceğimiz bir Web Projesi ekleyeceğim

İlk olarak servisimizi yazalım. Solution'a sağ tıklayıp Add sekmesinden NewProject diyorum ve karşıma gelen arayüzden ASP.NET Web Service Application sekmesini seçip ismine de blogService adını veriyorum.

Web servisimizi oluşturduğumuz anda Visual Studio bize standart bir Web Service'te olması gereken yapıları ve de bir metot örneği ile oluşturup getiriyor.

Şimdi gelelim asıl soruya. Peki bu servis ne iş yapacak?

Gelin basit bir metot yazalım ve metot bizden string bir değer alıp bunu içinde işleyip tekrar string olarak geri döndürsün. HelloWorld metodunu silip yerine kendi Hosgeldin metodumuzu ekleyelim.



Kural 1 - Eğer bir Web Service için metot yazıyorsanız, her zaman metodun başına [WebMethod] etiketini koymanız gerekir. Bu, metodun sisteme tanıtılmasını sağlar.

Kural 2 - Web Service'te yazdığımız metotlar Public olmalı ki dışarıdan çağırılabilsinler.

Kural 3 - Ve son olarak metodun geri dönüş tipinin Serializable (Serileşebilir) bir tip olması gereklidir. Serileşme'yi başka bir makalede uzun uzun anlatmak daha doğru olur.

Evet gelelim metodumuza. Metot bizden string "ad" ve "soyad" olarak iki değer alıp bunları işleyip, tekrar string olarak geri veriyor olsun.

























Metodumuzu yazdık. Test edelim bakalım servis çalışıyormu. ".asmx" uzantılı Web Service'imize sağ tıklayıp "View in Browser" diyoruz. Ve evet yazdığımız metot çağırılmak üzere üretilip getirilmiş. Tıklayıp değerleri girelim bakalım çalışacak mı ?





Güzel. Sıra geldi bu servisi kullanmaya. Peki bu servisi nasıl kullanacağız?

Servisi kullanabilmek için önce ona ulaşmak gerekir öyle değil mi? Peki bu nasıl olacak?

Bu noktada bazı hatırlatmaları yapmakta fayda var. Web Service'ler bir web sayfası gibi ulaşılabilirdir. Yani temelinde her web sayfasında olduğu gibi URL (Uniform Resource Locator)' i mevcuttur. Ve bu URL üzerinden ulaşılırlar.

Şimdi gelelim WebService'imizi dışarıya açmaya. Bu işlem için tabiki IIS (Internet Information Server)' ı kullanacağız. WebService'imizi dışarı açmak için (Publishing) Visual Studio arayüzümüzü de kullanabiliriz. Bunun için servisimize sağ tıklayıp Publish diyoruz.


Açılan arayüzden "..." diyip


















Burada ilk olarak Local IIS'i seçiyoruz. Ardından Web Service'i hangi dizin altında oluşturmak istediğimizi seçiyoruz. Ben test amaçlı olduğundan Default Web Site (Varsayılan Web Sitesi)'ı seçtim siz tabiki istediğiniz bir dizin oluşturabilirsiniz.
Daha sonra sağ üstte bulunan Create New Web Application diyip URL'imizin ismini veriyoruz. Ve son olarakda Open'ı diyip ilk karşımıza gelen menüde seçimlerimizin oluştuğunu görüyoruz.

Burada da Publish diyip servisimizi Local IIS'e açmış bulunuyoruz.



















Gördüğünüz gibi artık Web Service'imize "http://localhost/blogHosgeldinService/" adresinden erişebiliriz. Tabiki sonuna servisi ekleyerek. Yani "http://localhost/blogHosgeldinService/Service1.aspx"'i bir browser'da açar iseniz servisin çalıştığını göreceksiniz.

Artık servisi test edecek projeyi geliştirmeye başlayabiliriz. Bunun için Solution'ımıza yeni bir Web Project ekliyorum. İsmide blogServConsumer olsun.

Tüketici (Consumer) projemize bir adet Label, iki Textbox ve Button koyuyorum. Button'un click olayında Web Service'i de ki metodu çağırıp girdiğimiz değerleri Label'da göstereceğim.

Sıra Web Service'i projemize eklemeye geldi. Bunun için References kısmına sağ tıklıyorum. Gördüğünüz gibi karşımıza Add Reference, Add Web Reference, Add Service Reference isimli üç adet referans ekleme seçeneği çıktı. Peki neden üç farklı yol var ? "Neden ?" sorusu bir yazılımcı için olmazsa olmaz fakat bu sorunun cevabını başka bir makalede uzun uzun anlatmam gerekecek.

Bunu şimdilik geçip Add Service Reference diyorum.



















Karşımıza referans ekleme arayüzü geliyor. Burada referans eklemenin çeşitli yolları var. Örneğin sağ üstte bulunan Discover'a tıklayarak bu Solution içinde eklenebilecek servisleri listeleyip ekleyebilirsiniz. Veya Address kısmına direkt servisinizin URL'ini yazmak. Başka bir yol sol altta bulunan Advanced... seçeneğini seçerek
























Karşımıza gelen Service Reference Settings arayüzünden Compatibility kısmında bulunan ve açıklamasına yine girmeyeceğim Add Web Reference...'ı kullanmaktır.


































Karşımıza gelen arayüzden Web services in this solution'ı seçip bu solution içinde ki Web Service'leri listeliyoruz. Buradan da servisimizi seçtikten sonra çağırırken kullanmak üzere ismini verip (Web reference name : "blogServis") Add Reference diyip işlemimizi bitiriyoruz. Evet nihayet servisi ekleyebildik :)

Bir kaç saniyelik işlemden sonra servisin referenslara eklendiğini göreceksiniz. Gelin şimdide servisimizi kullanalım. Eklediğimiz Button'a çift tıklayıp kod tarafına geçiyorum. Servisi her event içinde çağırmamak için Page_Load metodunun üstüne servisimizin yeni bir Instance'ını alıyorum.

blogServis.Service1 blogServis = new blogServConsumer.blogServis.Service1();

Sırada button'a tıklanında metodu çağırmak kaldı. Click eventinde blogServis ismiyle oluşturduğum servisimizi çağırıp gerekli işlemleri gerçekleştiriyorum.

LabelSonuc.Text = blogServis.Hosgeldin(TextBoxAd.Text, TextBoxSoyad.Text);























Bakalım çalışıyor mu? Default.aspx sayfamı çağırıp gerekli bilgileri giriyorum ve "Göster" diyorum...













Web Service kullanarak ilk uygulamamızı geliştirdik. Bundan sonra ki dönem de Web Service ipuçlarını (Güvenlik, Performans, Asenkron Çözümler, Gerçek bir Web Service için gerekli ayarlar...) ele alacağım.

Tekrar görüşmek üzere.

Download : blogWebService

6 Şubat 2010 Cumartesi

ASP.NET - Xml WebServices (1 - Giriş)

XML WebServices

Merhabalar,

Bu yazıda web ortamında çok işimize yarayan Xml WebService'lerini inceleyeceğiz. Bu incelemeyi yaparken WebService'lerine neden ihtiyaç duyarız? Ne zaman kullanılmalı? gibi sorulara da yanıt arayıp bu işin mantığını anlamaya çalışacağız.

Şimdi düşünün ki bir firma için yazılım geliştiriyorsunuz ve geliştirdiğiniz yazılımda bu firmanın çok gizlilikle elde ettiği veya sakladığı verilerin bazılarını alıp kullanmanız gerekiyor. Bu verilere ulaşmanın bazı yolları var. Mesela bu verileri bir kağıda basıp size gönderebilirler. Ama bu çok ilkel ve bazen de işinize yaramaz bir çözüm olabilir. Çünkü verileri incelemek yerine veri yapısına göre bir algoritma hazırlıyor olabilirsiniz. Sonuçta firmanın kullanacağı bir yazılım yazıyorsunuz. Bu yazılımın veri kısmı firmanın kullandığı veri yapısına bağımlı. Neyse ikinci seçenek olarak firma kendi Database'ini size açabilir. Size bir kullanıcı oluşturur siz de bu sayede girip istediğiniz veriye ulaşırsınız. Fakat bu noktada sizi kendi Database'lerine almaları güvenli değil. Bunu istemeyebilirler.

Veya başka bir örnek ise; Yine bir firma için yazılım geliştiriyorsunuz. Geliştirdiğiniz yazılımda o firmanın kendi yazılımcılarının oluşturduğu Class'ları ve metotları kullanmanız gerekiyor. Peki nasıl ulaşacaksınız o class'lara ve  metotlara? Çözüm ne mi? Tabi ki Xml WebServices.

Not: Microsoft'un şimdilerde patlatmaya hazırlandığı WCF (Windows Communication Foundation) Xml WebService'lerine bir alternatif (hatta abisi) durumunda. Belki ileride WebService'ler yerine WCF kullanacağız.

Xml WebServisleri bize veriye ulaşma ve yönetme kısmında güvenli ve rahat bir ortam sunuyor. Xml WebService'i İnternet'e açılmış veriler topluluğu olarak da düşünebiliriz.

Peki Xml (Extensible Markup Language) diyip duruyorumda Xml bunun neresinde? Xml adı üstünde bir Markup Language (Etiketleme/Biçimlendirme Dili). WebService'in Xml tabanlı olması, onu platform bağımsız bir hale getiriyor. Yani Xml yapısında ki bir veriyi biz her tür işletim sistemi ve program ile alıp kullanabiliriz. Xml'in Text tabanlı olması da güvenliği bir kat daha arttırıyor. (Xml text tabanlı olduğundan Firewall'a takılmaz)
WebService'lerinin kullandığı diğer protokoller ise HTTP (Hypertext Transfer Protocol) ve SOAP (Simple Object Access Protocol - Basit Nesne Erişim Protokolü)
HTTP ile Web ortamını temsil ederken. SOAP ile gönderilen verilerin iç bilgilerini sakladığı bir yapıdan bahseder.

Bu yazıda işin mantığını anlatmaya çalıştım. Bir sonra ki yazımda uygulamalı örneğini ve bazı ipuçları ele alacağım.

Devam edecek...

8 Ocak 2010 Cuma

Mobile - Windows Mobile 6.1 "NETCFv35.Messages.EN.wm.cab Hatası"

"An error message is available for this exception but cannot be displayed because these messages are optional and are not currently installed on this device. Please install ‘NETCFv35.Messages.EN.wm.cab’ for Windows Mobile 5.0 and above or  ‘NETCFv35.Messages.EN.cab’ for other platforms. Restart the application to see the message."

Merhabalar,

Geçenlerde başıma gelen ve çok can sıkıcı bir olayı ve çözümünü paylaşmak istedim. Windows Mobile 6.1 için bir uygulama geliştiriyordum. Bu uygulama bir WebService'i kullanarak bir takım verileri göstermek üzere tasarlanmıştı. Herşey güzel giderken tam verileri alma sırasında

"Bu özel durum için bir hata iletisi var, ancak bu iletiler isteğe bağlı olduğundan ve şu anda bu aygıta yüklü olmadığından görüntülenemiyor. Lütfen Windows Mobile 5.0 veya üzeri için ‘NETCFv35.Messages.EN.wm.cab’ dosyasını, diğer platformlar için ‘NETCFv35.Messages.EN.cab’ dosyasını yükleyin. İletiyi görmek için uygulamayı yeniden başlatın."

gibi bir hata ile karşılaştım. Hatada da dediği gibi "NETCFv35.Messages.EN.wm.cab" dosyasını Mobil cihaza yüklemem gerekiyordu. Bilgisayarda yaptığım aramada cab dosyasını "C:\Program Files\Microsoft.NET\SDK\CompactFramework\v3.5\WindowsCE\Diagnostics" klasörü içinde buldum. Dosyayı Mobil cihaza kopyalayıp sorunsuz bir şekilde kurdum. Acaba çalışırmı derken yine aynı sorun karşıma çıktı.

Biraz araştırdıktan sonra NETCFv35.Messages.EN.wm.cab dosyasını açarak içinde ki SYCCFA~1.001
dosyasını System.SR.dll olarak değiştirdim ve bu dll'i geliştirdiğim projede referans olarak ekledim.

Benim için sorunsuz çalıştı. Umarım yardımcı olmuştur...

Not: Eğer PocketPC'lerde WebService'e bağlantıda sorun yaşarsanız. WebService'inizin yolunu http://localhost/.. gibi değilde localhost yada her ne var ise IP'nizle ( http://192.168.1.1 gibi) değiştirmelisiniz.
Çünkü cihazın kendi IP'si olduğu için localhost onun için birşey ifade etmez. Bizim gidip IP adresini ona göstermemiz lazım.

Basit olarak tekrar üstünden geçeyim:

1 - C:\Program Files\Microsoft.NET\SDK\CompactFramework\v3.5\WindowsCE\Diagnostics
e giderek NETCFv35.Messages.EN.wm.cab dosyasını mobil cihazımıza atıp yüklüyoruz.

2 - NETCFv35.Messages.EN.wm.cab dosyasını açarak (Winzip ile mesela) içinden SYCCFA~1.001 dosyasını bir yere atıp adını System.SR.dll olarak değiştiriyoruz.

3 - System.SR.dll dosyasını kullandığımız projeye referans olarak ekliyoruz.

22 Ekim 2009 Perşembe

C# - Yer değiştiren form ; Timer ve Random Kullanımı


Tekrar merhaba. Bugün güzel ve sık kullanılan kontrollerden biri olan Timer'ı ve daha sık kullanılan class'lardan biri olan Random'u inceleyeceğiz.
Timer'ın pek fazla özelliği yoktur. Kullanım amacı bir şeyi belirli aralıklarla tekrar yapmaktır. Örnek olarak bu Event tetikleme olabilir.
Timer'ın en çok kullanılan yönü "tick event"dir. Tick Event'i verilmiş bir zaman aralığında (ki bunuda Interval ile yapıyoruz) Event'inin içinde bulunan kodları çalıştırır.

Örnek uygulama olarak gelin belirli bir zaman aralığında, mesela her 3sn de bir yer değiştiren bir form uygulaması yapalım. Hatta form'un bir saat göstergesi de olsun.

Ok hemen yeni bir Windows Form uygulaması açıp ismine timerSaat diyorum. Kolay olandan başlayalım önce saati göstereceğimiz bir yer olmalı öyle değilmi? Hemen bir Label koyuyoruz forma. Label'ın AutoSize'ını kapatıp (false), boyutları ve Font'uyla oynuyorum (süsliyim biraz). Label'ın ve Form'un BackColor özelliğini Siyah seçtim. Gelin birde Form'un Border'ını kapatalım (yani başlığı olmasın). Bunu yapmak için Form a tıklayıp F4 ile özelliklerine gidip buradan FormBorderStyle'ı "None" yapıyorum. Evet hep başlık olucak değil ya.
Güzel olduda bu seferde kapatmada sıkıntı vericek böyle olursa. Ozaman bir Button koyar bu işide hallederiz. Button'un da Text'ine "Kapat" dedik mi dadından yenmez.

Süslemeye devam. Form'a bir Label daha ekleyelim, form'un yer değiştirme olayı ile ilgili bilgi verici bir kaç kelam ederiz.
Fark etmişsinizdir, eklediğim label siyah renkte yazıldığı için görülemiyor. Rengini değiştirmek için özelliklerine gelip ForeColor (yani text rengi) özelliğini (güzel bir renktir severim) "Maroon" yapalım. Font'unu da "Verdana" ve boyutunu 14 yaptım.


(tabii ben bu screenshot'ı aldığım da faz geçip font'u verdana, boyutu 12 yapmıştım)

label2'nin textini açıklayıcı bilgileri yazalım; "Bu Form 3sn aralıklarla yer değiştirecektir! Duyurulur". Gördüğünüz gibi AutoSize'ını false yapmadığımız için sağa doğru ilerledi ve formdan dışarı çıktı. İşte AutoSize ı nasıl kullanmak gerektiğinin güzel bir örneği. Hemen AutoSize ı false yapıp, güzelce yerleştiriyoruz form'a.

Saat'in de (label1) rengi biraz mat mı oldu ne? Sanki oldu gibi. Red yapayım onu ben. Siz istediğiniz gibi takılın tabiki. Hatta baştan vereyim renkleri iyisimi.

Eveet herşey tamamda Timer'lar nerde dimi? Ok ToolBox'a gelip Components sekmesinden (aşağılara doğru) Timer'ı bulup form'umuza ekliyoruz. Gördüğünüz gibi Timer'ın form üzerinde bir görünümü yok. Sadece altta çalışan bir özelliktir. Alttan timer1'i seçip F4 ile özelliklerine bakalım biraz. Burada Timer'ın iki önemli özelliği var. Biri "Enable" diğeri ise "Interval" özelliğidir.

1 - Enable özelliği; Uygulamanın başlar başlamaz (yani çalıştığında) timer'ın aktif hale gelmesini ayarlar. Yani Enable'ı True yaparsak Form çalışır çalışmaz timer saymaya başlar. False yapılacak durumlarda; Timer'ın sizin istediğiniz anda başlamasını istiyorsanız Enable'ını False seçersiniz. Ör) Saat 20:00'da çalışsın gibi..

2 - Interval özelliği; Timer'ın çalışma sıklığını belirler. Yani Timer "tick event"ini hangi sıklıkla (saniye,milisaniye) gerçekleştirsin. Örnek olarak Interval'i 1000 olan bir timer; her 1sn de bir çalışır. (1000ms = 1sn)

Not : Timer'ın ilk "tick event" i sadece ilk çalıştığında olmak üzere Interval süresi kadar gecikir.

Ok amacımızı unutmayalım. Hem saati göstereceğiz, hem de form kendini 3sn de bir yer değiştirticek. Hmm düşünme zamanı; Sanırım buldum bize iki timer lazım. Bir tanesi saat için; Her bir saniye de bir çalışıp ekrana o anki saati yazdıracak. Ve diğeri; form'un üç saniyede bir yer değiştirmesi için.
Tamamdır ilk eklediğimiz timer1 in Interval'ini 1000, Enable'ını true, şimdi ekleyeceğimiz timer2'ın Interval'ini 3000 ve Enable'ını True yapıyoruz.



Hadi artık kod yazmaya başlayalım.Kapat Button'unu aradan çıkaralım. Button'a çift tıklayıp kodunu yazıyoruz:

private void button1_Click(object sender, EventArgs e)
        {
            this.Close();
        }

this : O an üzerinde olduğun Class'ı temsil eder. İleri de Class mantığına değineceğiz. Bizim için "this" = "form" şuan da. this.Close() ; Bu form'u kapat anlamına gelir. Button'a tıklandığında form kapanacak.

Saat'i yazmak için tabiki timer1'e çift tıklayıp; "timer1"in tick event'ine geliyoruz. Ve oraya şu kodları yazıyoruz. (daha önce göstermiştim; bkz: Basit Saat Uygulaması)

private void timer1_Tick(object sender, EventArgs e)
        {
            label1.Text = DateTime.Now.ToLongTimeString();
        }

Şimdi çalıştırıp test edelim. İlk çalıştığında "label1" yazıyor değilmi saatin yerinde :) Evet bunun sebebi; Yukarda bahsettiğim Timer'ın Interval değeri kadar gecikmesidir. Düzeltmek için Form'a çift tıklayıp Form'un Load'u na timer1 de bulunan kodları yazıyoruz. Böylelikle form yüklendiğinde de (yani ilk açıldığında) saat'i göstersin.

Tamamdır. Sıra geldi yer değiştirmeye; Bunun için timer2'ye çift tıklayıp tick event'ine gidiyoruz.Şimdi her 3sn de bir ne olmasını bekliyorduk? Yer değiştirmesini değilmi. Peki bunu nasıl yapar sizce? Şöyle söyliyeyim. Ekranda bulunan herşeyin bir Kordinat'ı vardır aslında bilgisayarda. Neyin nerede olduğunu sürekli saklar ve günceller. İşte biz bunu değiştirerek istediği yerlere gitmesini (tabi belirli sınırlar dahilinde) sağlayacağız. Ve tabi bu değer sürekli değişmeli. Yani sabit kalırsa hep aynı yerinde kalmaz mı? Bu tür durumlar için C#'ta Random class'ını kullanırız. Yalnız Random bir class olduğundan yeni bir kopyası üretilmeden özellikleri kullanılamaz.

Şimdi ilk başta bir Random kullanılmak isteniyorsa kopyalanmalıdır demiştik. Aynen şunları yazıyorum: Random rastgele = new Random();
rastgele nesnemi " . " ile çağırarak özelliklerini artık kullanabilirim.
VS size zaten yardımcı olacaktır yazarken (IntelliSense).


Şimdi bir x sayısı tanımlayalım ve bu x sayısını rastgele sayılar üretsin. Ve timer2 nin içinde olsun ki her 3sn bir bu rastgele üretme işlemi gerçekleşsin.

int x = rastgele.Next(Screen.PrimaryScreen.WorkingArea.Width - this.Width);

random üretmek için kopyaladığımız rastgele yi çağırır ve onun "Next" özelliğini kullanırız. Next özelliği; ( ) Parantezleri arasına aldığı değer aralığında rastgele pozitif sayılar üretir. Ör) Next(50) mesela, 1,5,49,30 gibi sayılar üretebilir. Fakat Next tek başına çalışmaz. Mutlaka onun çağırdığı bir kopyalanmış Random nesnesi olmalı. Bizim nesnemiz  burada "rastgele".

Screen.PrimaryScreen.WorkingArea; ise o an ekranda çalışılan alanı tanımlar. Eğer biz ekranın genişliğinden (width) kendi form'umuzun genişliğini çıkarırsak geriye bizim form'umuzun ekranın dışına çıkmadan rahatça sağ sol yapabileceği bir alan oluşur. Bunuda random lar ve form'un left ine verirsek iş tamamdır.

Peki nasıl atayacağız bu değeri? "this.left" ve "this.top" bunlar bize form'u (yani this'i) yer değiştirmemizi sağlayacak özellikleridir.

Örneğin: this.left = 10; yapın ve çalıştırıp gözlemleyin.
veya
       this.top = 200; yapıp gözlemleyin. Daha iyi anlayacaksınızdır.
Ama ben bu top ve left özelliklerini sürekli değişik değer gelmesini istiyordum öyle değilmi? Çünkü her timer2 "tick" olduğunda (yani 3sn de bir) yeni bir this ve top değerinin form'un yerini değiştirmesini istiyorum


this.Left = x;

Aynı şekilde yükseklik (y ekseni) için de yapıyorum.

int y = rastgele.Next(Screen.PrimaryScreen.WorkingArea.Height - this.Height);

Önce bir rastgele y sayısı üretim bunu form'un yukarıdan olan uzaklığı olarak atıyorum.

this.Top = y;

Yalnız burada Width değil Height kullanıyoruz (yükseklik ayarı için) unutmayın.

Çalıştırıp gözlemliyoruz. Unutmayın ilk tick interval süresinden sonra çalışır (yani 3sn sonra tetiklenir).

Şimdilik bukadar. Tekrar görüşmek üzere...

KODLAR:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace blogTimerSaat
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            label1.Text = DateTime.Now.ToLongTimeString();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            label1.Text = DateTime.Now.ToLongTimeString();
        }

        private void timer2_Tick(object sender, EventArgs e)
        {
            Random rastgele = new Random();
            int x = rastgele.Next(Screen.PrimaryScreen.WorkingArea.Width - this.Width);
            this.Left = x;
            int y = rastgele.Next(Screen.PrimaryScreen.WorkingArea.Height - this.Height);
            this.Top = y;
        }
    }
}

Link : blogTimerSaat

5 Ekim 2009 Pazartesi

C# - Windows Application ; Basit Saat Uygulaması

Tekrar merhaba uzun zamandır fırsat bulup birşeyler ekleyemedim. Şimdi fırsat bulmuşken çeneyi bırakıp direk işimize bakalım .)

Basit Saat Uygulaması



Her uygulamada olabileceği gibi bir saat yapalım kendimize..

Ok başlıyoruz. Visual Studio'yu açıp (veya Ctrl + R yapıp çalıştır'a "devenv" de yazabiliriz) hemen Ctrl + N yapıp yeni bir Windows Form Application açıyoruz. İsminede siz karan verin artık
Şimdi saat uygulamasının mantığı şöyle çalışır; Her 1000milisaniye yada 1sn de bir ekrana o an Windows'un saat'ini yazdırırsınız. Böylece sanki saat ilerliyormuş gibi görünür.

Saatimizi bir Label gösterelim. Ozaman hemen Toolbox'tan bir Label'ı alıp form'umuza koyuyoruz.Label ilk eklendiğinde AutoSize'ı "True" gelir.F4'e basıp, o Control'un özellikler kısmına geçip AutoSize'ını "False" yapıyoruz ki boyutuyla oynayabilelim. Şimdi biraz kenarından çekin uzatın büyütün, saatimiz büyük olsun .)
Font kısmından istediğiniz yazı tipini arka plan rengini ayarlayabilirsiniz. Yine Özelliklerde TextAlign özelliği; Label'ın içindeki Text'in nerede duracağını bize söyler. Bunuda TopLeft'ten MiddleCenter yapıyoruz. (Ortada dursun, akıllı olsun)


Ok design kısmını hallettik. Şimdi geldi sıra kod yazmaya. Peki bu kod diğer örneklerdeki gibi Button'la tetiklenmiyor, peki nasıl tetiklenecek? nereye tıklayacağız kod yazmak için?
Ne demiştik başta saatin çalışma mantığına; Her 1 saniyede bir ekrana o an ki saati yazacak değil mi? Ok ozaman böyle bir şeyi hangi Controlle yaparız? Cevap basit Timer. Hemen ToolBox'ın Components sekmesinden en altta Timer'ı form'umuza ekliyoruz. Timer'da Label gibi ilk eklendiğinde belli bazı değerleri kendi otomatikman alır. Bunları görmek için F4'e basabiliriz. Burada en önemli kısım Enable ve Interval kısmıdır. Enable'ın "True" olması Timer'ın uygulama başlayınca hemen başlaması anlamına gelir. Bazı durumlarda False istediğimiz zamanda başlamasını sağlayabiliriz. Interval kısmı ise; Timer'ın hangi süre aralığında Event'ini (yani olayını Tick Event'ini) gerçekleştireceğini ayarlamamıza yarar.
Enable'ı "True" ve Interval'i "1000" (yani 1sn, interval'in birimi milisaniyedir) yapıyoruz.

Peki bir soru daha.Uygulama hangi Event'le (Olay'la) çalışıyor. Yani yazılan kod'un gerçekleşeceği event hangisi? Cevap yine Timer. Timer her 1sn de bir kendi Event'ini gerçekleştirecek.Bu yüzden kod tarafına geçmek için timer'a çift tıklıyoruz. Ok sonunda kod tarafı :)

Eveet şimdi gördüğünüz gibi timer1_tick event'i karşımıza geldi. Bunun mantığı şudur. timer1 her 1sn de bir bizim yazdığımız kodları gerçekleştirecek. Ozaman yazalım

label1.Text = DateTime.Now.ToLongTimeString();

DateTime C#'ta tarih, saat gibi parametrelerle çalışılırken kullanılır. Buradaki "Now" kısmı, şimdiki saati ver anlamına gelir. Ve "ToLongTimeString()" kısmı ise formatını belirler.

Tamam çalıştırıp görelim bakalım ne olmuş? Ctrl + Shift + B yapıp Build ettikten sonra F5'e basıp çalıştırıyoruz.

Evet çalıştı... Ama ilk geldiğinde hala saati yazmamış label'ın adını yazmıştı öyle değil mi? Bunun sebebi basit, Timer Control'ü ilk çalıştığında daima kendi Interval süresi kadar gecikir. Yani ilk tick (ilk çalışma) 1sn sonra gelir. Bu durumu düzeltmek için Form'un ilk açıldığı ana aynı kod'u tekrar yazabiliriz. Bunun için form'umuzun boş bir yerine çift tıklayarak (veya form'un F4 ile özellikler penceresinden Event sekmesine (Yukarıda sağda, şimşek şeklinde bir ikonu var) Load kısmına çift tıklayarak) kod tarafına geçiyoruz ve timer'ın kodlarını orayada yazıyoruz. Böylelikle Uygulama ilk açıldığında hemen saati gösterecektir.



Evet nur topu gibi bir saatimiz oldu... Görüşmek üzere.

KOD:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace blogSaat
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            label1.Text = DateTime.Now.ToLongTimeString();
        }

       
    }
}