Makale Özeti

Uygulamamız da bir olay meydana geldiğinde kullanıcıyı uyaran bilgilendirici bir mesaj ekranda belirtilmesi gerekiyorsa bu kontrol tam bu iş içindir.Belirli bir koşula istinaden ekran da gösterilecek mesaj notification içerisinde “yukarıda bahsettiğimiz gui’ye istinaden” uygulamamızın görünen kısmından taviz verilerek hazırlanan bilgilendirici ekranlar veya MessageBox gibi çalışmadığından çok daha kullanışlıdır...

Makale

Mobil Uygulamalar için CF 2.0 ile gelen Notification Kontrolü

 

            Kullanıcı arayüzü  tasarlarken ekranda ki her bir nesnenin dizilişinden tutunda içinde tuttuğu verinin ekrana gösterimine kadar önem arzeden bir çok dikkat edilmesi gereken unsur vardır.Bu unsurların herbirinin önem seviyesi duruma göre değişiklik gösterebilmektedir.Burda ki kastım mobil cihazların ekran boyutlarının bir pc ekranına göre belirgin bir şekilde küçük olması ; mobil cihazlar için  yazılım geliştirirken kullanıcının gerçekten ihtiyaç duyduğu en önemli verileri ekranda gösterme ve kullanıcının kullanımına sunma esasını 1. dereceden göz önüne alınmasını gerektirmekte.İşte mevcut CF kontrollerinin yanı sıra 3 parti mobil bileşen üreten yazılım evlerinin geliştirdiği kontrolleri uygulamamızda kullanırken pc’ler için geliştirilen herhangi bir yazılımdan daha da fazla dikkatli olmak zorunda kalırız..

 

            Microsoft CF 2.0 la birlikte notification kontrolünü kullanımımıza sunmuş ve zaten ufak olan ekranın kullanıcı ile iletişime geçebildiği kısmını daha da verimli kullanmamıza yardımcı olmuştur.Tabi notification’ı sadece gui (graphical user interface- grafiksel kullanıcı arayüzü) ‘de avantaj sağlayan bir yenilik olarak düşünmek yanlış olacaktır.Birinci amacı adından da anlaşılabileceği gibi notifikasyon yapmaktır..Uygulamamız da bir olay meydana geldiğinde kullanıcıyı uyaran bilgilendirici bir mesaj ekranda belirtilmesi gerekiyorsa bu kontrol tam bu iş içindir.Belirli bir koşula istinaden ekran da gösterilecek mesaj notification içerisinde “yukarıda bahsettiğimiz gui’ye istinaden” uygulamamızın görünen kısmından taviz verilerek hazırlanan bilgilendirici ekranlar veya MessageBox gibi çalışmadığından  çok daha kullanışlıdır.Belli peryodlarla kullanıcıya gerekli bilgiyi vermekte ve onu yönlendirmektedir.Örnek vermek gerekirse mobil cihazlar için bir randevu yazılımı hazırladığımızda ihtiyacımız olacak en önemli unsurlardan biri hiç şüphesiz notification kontrolü olacaktır..

 

            Notification kontrolünde alınan mesajda ilgili butona basınca gerçekleşmesini istediğimiz herhangi bir olay varsa şayet bunu ResponseSubmitted olayına yazmamız yeterlidir.

 

            Notification kontrolünde kullanıcıya gösterilecek olan mesaj düz bir metin olabileceği gibi HTML de içeriyor olabilir. Biz örnek uygulamamız da HTML veriyi ekrana taşıyacağız.Ayrıca HTML kodunun içeriğinde istenirse CheckBox , Button , List veya diğer html element’leri pekala bulunabilir.Bu yüzden çok esnek bir yapıya sahiptir.

 

            Eğer ekrana çıkan notification mesajında Cancel buton “cmd:2” ile tamamlanırsa kalıcı Notification sağlanır.Yani Cancel butonuna basılması durumunda üst tarafta yer alan Notification simgesi yok olmaz ve istenildiği zaman buradan çağrılabilir..

 

            Uygulamamıza aşağıdaki resimdeki gibi sürükle bırak yaparak Notification kontrolü yerleştirebileceğiniz gibi örnek uygulamada yaptığımız şekilde yani kodsal olarak da ekleyebilirsiniz.Bu arada burda bir şey belirtmeliyim ki Visual Studio içerisinde gereksiz yere ekrana sürükle bırak yapacağınız yanlızca design time da görünen kontrol örneklerinin tasarım yaptığınız alanı belli bir zaman sonra kullanılmaz hale getirmesi kaçınılmazdır.Her ne kadar mobile uygulama geliştirirken emulatore ait skin açıkken bile çok büyük bir alana ihtiyacınız olmasada windows application veya web application geliştirirken bu büyük bir sorun olmaktadır..Tabi bu bahsettiğim kompleks uygulamalar için daha büyük önem arzetmektedir ki zaten öle uygulamalarda böle canınızın istediğini ekrana sürüklemezsiniz.. J ( OOP ve tasarım desenleri işin içinde olduğundan usercontrol geliştirmek gibi akılcı mantalitelerle hareket eden yazılım evi gerek kendi oluşturduğu framework gerekse takip ettiği yazılım süreç yönetimi yaklaşımları neticesinde üretikleri projelerde bu denli basit hatalara kolay kolay yer vermezler.. J (Aslında  bu hata değil diyenleri duyar gibiyim ama verimliliğe negatif unsur olan herşey bir anlamda hatadır kanımca.Ekrana her baktığınızda bir sürü kontrol görmek kişinin yani programcının konsantrasyonunu ciddi anlamda etkileyecektir..) )

 

                                                

 

            Uygulamamızı aşağıda ki gibi bir ekrana sahip olacak şekilde tasarlıyoruz..Merak etmeyin makalemizin sonunda uygulamamızın kodlarını indirebileceğiniz bir link var.

 

                                              

 

namespace Microsoft.Samples.DeviceNotification

{

       using System;

       using System.Drawing;

       using System.Collections;

       using System.ComponentModel;

       using System.Windows.Forms;

       using System.Data;

       using Microsoft.WindowsCE.Forms;

 

 

    public partial class DeviceNotification : System.Windows.Forms.Form

    {

             Notification notify = new Notification(); // drag&drop'da yapabilirdik.Bu şekilde örneklendiriyoruz..

 

        public DeviceNotification()

        {

            InitializeComponent();

             }

             private void DeviceNotification_Load(object sender, EventArgs e)

             {

 

                    //Notification kontrolü içerisinde gösterilecek olan veri html olacak şekilde yapılandırılıyor..

       

                    System.Text.StringBuilder notifyHtml = new System.Text.StringBuilder("<html><body>"); // Hızlı olması açısından stringBuilder’ı seçtik.

                    notifyHtml.Append("Notification Test");

                    notifyHtml.Append("<p><form method='GET' action=mybubble>");

                    notifyHtml.Append("<p>Bu bir <font color='#0000FF'><b>HTML</b></font> text denemesidir..<font color='#FF0000'><i>Eralp</i></font> </p>");

                    notifyHtml.Append("<p><input type=text name=textinput value='Test yazısı'><input type='submit' value='Onay'></p>");

                    notifyHtml.Append("<p align=right><input type=button name=OK value='Evet'> <input type=button name='cmd:2' value='Hayır'></p>");

                    notifyHtml.Append("</body></html>");

 

                    //Notification nesnesine yazdığımız bu html kodunu bağlıyoruz..

                    this.NotifyText.Text = notifyHtml.ToString();

 

                    //Notification nesnesinin ayarları yapılıyor..

                    notify.Caption = this.NotifyCaption.Text;

                    notify.Critical = this.NotifyCritical.Checked;

                    notify.InitialDuration = (Int32)this.NotifyDuration.Value;

                    notify.Text = this.NotifyText.Text;

 

                    this.NotifyIcon.Text = "Icon2";

 

                    //Kullanıcının vereceği cevapları handle edebileceğimiz event'ları kontrolümüze bağlıyoruz..

                    notify.BalloonChanged += OnNotifyBubChange;

                    notify.ResponseSubmitted += OnNotifyResponse;

 

 

             }

             private void OnNotifyBubChange(Object obj , BalloonChangedEventArgs e)

             {

                    //Notification'da meydana gelen değişiklikler handle ediliyor..

                    this.NotifyVisable.Text = e.Visible.ToString();

             }

      

       private void OnNotifyResponse(Object obj, ResponseSubmittedEventArgs e)

             {

                 //Notification nesnesine kullanıcının verdiği cevaplar handle ediliyor..

                 this.NotifyReponce.Text = e.Response.ToString();

            notify.Visible = false;

             }

             private void NotifyCaption_TextChanged(object sender, EventArgs e)

             {

                    //Notification nesnesinin caption bilgisi set ediliyor..

                     notify.Caption = this.NotifyCaption.Text;

             }

 

             private void NotifyText_TextChanged(object sender, EventArgs e)

             {

                 //Notification nesnesinde ki string bilgi set ediliyor...

                     notify.Text = this.NotifyText.Text;

             }

 

             private void NotifyIcon_SelectedIndexChanged(object sender, EventArgs e)

             {

                    //Notification nesnesine ait ikon set ediliyor..

 

                     switch (this.NotifyIcon.Text)

                     {

                            case "Icon1"// Reflection ile resouce ayıklanıyor..

                                   notify.Icon = new Icon(System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream("DeviceNotification.Resources.bel.ico"), 16, 16);

                                   break;

                            case "Icon2":

                                   notify.Icon = new Icon(System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream("DeviceNotification.Resources.cedialer.ico"), 16, 16);

                                   break;

                     }

             }

 

             private void NotifyCritical_CheckStateChanged(object sender, EventArgs e)

             {

               //Notification nesnesinin Critical property'sini set ediyoruz.

            //True olduğun da kırmızı çerceveli çıkar değilse normal siyah çerceveli bir notification görünecektir.

                    notify.Critical = this.NotifyCritical.Checked;

             }

 

        private void DeviceNotification_Closing(object sender, CancelEventArgs e)

             {

                    //Notification nesnesi kapanırken nesnemizi dispose ediyoruz..

                    notify.Dispose();

             }

 

             private void NotifyDuration_ValueChanged(object sender, EventArgs e)

             {

                    //Notification nesnesinin ekran da kaç saniye görüneceğini set ediyoruz..

                    notify.InitialDuration = (Int32)this.NotifyDuration.Value;

             }

 

             private void cmbAktif_CheckStateChanged(object sender,EventArgs e)

             {

                    //notification nesnemizi aktif pasif yapmak için..

                    notify.Visible = this.cmbAktif.Checked;

                    }

 

    }

}

 

Şimdi isterseniz bir de uygulamamızın çalışan ekran görüntülerini inceleyelim..

 

                                  

 

Resimde görüldüğü üzere Notification’ını aktif et dediğimizde bize html olarak hazırladığımız dökümanı mesaj olarak getirdi..Ve biz bu durumda Evet diyene kadar kapanmayacaktır..Hayır dediğimiz takdirde systray uygulamaları gibi aşağıda bekleme pozisyonun da kullanıcının dikkatini çekmek üzere hazırda bekleyecektir..

 

                                  

 

Ekrana gelen notification içerisinde html olarak ekrana getirdiğimiz text elementinin içeriğini istediğimiz gibi değiştirir ya da hiç değiştirmeden Onay butonuna basacak olursak bu değeri uygulamamıza göndermiş oluruz..Bu da bizim için mobile uygulamalarda işlevsellik anlamında müthiş kolaylık demektir.

 

                                  

 

Verinin alınmış hali..

 

                                  

 

Kritik seçiliykende ekrana gelen notification’ının çercevesinin kırmızı olduğunu daha önce belirtmiştik zaten..

 

Görüldüğü gibi çok faydalı bir kontrol olan notification uygulamalarımızın daha işlevsel olabilmesi açısında kanaaitimce çok büyük önem arzetmektedir..

 

  • Kodları İndirmek İçin Tıklayınız...
  •  

     

    Şimdilik bu kadar..Takıldığınız bir nokta olursa eralp.erat@savyazilim.com adresinden bana ulaşabilirsiniz..

     

    Unutmayalım bilgi paylaşıldıkca değerlidir..

     

    Eralp Erat

    Mcp, Mcad.NET , Mcsd.NET

    HIMS

    www.eralperat.com

     

     

     

    Kaynak Kodları İndirmek İçin..