ben

OMÜ , Bilgisayar Mühendisliği, 13'

11 Kasım 2013 Pazartesi

WindowMessage Yonetimi

    Formlar arası iletişimde herzaman tetikleyici yada bir komut kullanılır. Örnegin bir işlem bittiğinde baska bir public olan formdaki bir public  metheodu nasıl çalıştırırız.  satatic olsa sorun yok formadi.method() yazıp o methoda ulasırız fakat durum şu ki hem formsınıfı hemde methodumuz public. Yeniden turetmeyı denesek mevcut bılgıler sıfırlanacak. formun o ankı verileriyle içerisindeki bulunan bir methodu "şuişlem bitince sen çalıs" nasıl dedittirebiliriz? Bunun için messageSınıfı olusturulmus bu message proje kutuphanesine buradan ulasıp projemize dahil edelim. message servisi framework 4 ile yapılmıs eger uyumsuzluk cıkarsa projenizi framework 4 e tasırsanız sorun hallolur.

Son ahli yukarıdaki gibi olmalı . Windowmesage projemize MesajServisi projesini referans olarak verelim. Daha sonra MainWindowda bir buton olusturalım. Projeye bir tane daha window acalım(window2). window2 yede bir tane label atalım. Window1 deki butona basıldığında window2 deki labele birseyler yazdıralım. Öncelikle message bilgilerini tutabilceğimiz bir sınıf ekleyelım(messageBilgisi.cs) Sınıf içerisini  aşağıdaki gibi kodlayalım.

using MesajServisi.Messaging;

 public static class messageBilgisi
    {
        public static readonly string LabelYaz = "LabelYaz";
    }
    public class StringMessage : MesajBase
    {
        public string Message { get; set; }

        public StringMessage()
        {
            Sender = "StringMessage";
        }
    }


Window1 içerisinden mesajımızı gönderelim. program çalıstığında window1 ve window2 ıkısınde calısacak. window1 deki butona tıklandıgında window2 ye mesaj gıdecek. mesaj gonderme işlemi;

Messenger.Default.Send(new BilgilendiriciMesaj(messageBilgisi.LabelYaz));

window2 de bu mesajı karsılayıp işlemi yaptıralım:

public window2()
        {
            InitializeComponent();
            Messenger.Default.Register<BilgilendiriciMesaj>(this, (message) =>    BilgilendiriciMesajHandler(message));
        }

private void BilgilendiriciMesajHandler(BilgilendiriciMesaj message)
        {
            if (message.Bilgilendirici == messageBilgisi.LabelYaz)
            {
                labelYaz();
            }
        }
        public void labelYaz()
        {
            label1.Content = "Ben message servisi ile window1 den yazdırıldım";
        }



Programı çalıstıralım:

 Çalıstır Butonuna basıldıgında istenilen işlem yapılmaktadır.


Hiç yorum yok: