28 Kasım 2014 Cuma

8 Kasım 2014 Cumartesi

C# ta invoke metodu kullanımı ve farkları

Örnek 1---->
======================================================================
public partial class MainForm : Form
    {
        public MainForm()
        {
            InitializeComponent();
        }
        void Button1Click(object sender, EventArgs e)
        {
            MessageBox.Show("Buton 1 Tetiklendi :D");
        }
        void Button2Click(object sender, EventArgs e)
        {
//      ----Önemli Olan Nokta----- Yani Buton1'in tetiklendiği yer!!
             Button1Click(new object(),new EventArgs());
//      ----Önemli Olan Nokta----- Yani Buton1'in tetiklendiği yer!!
        }
    }
======================================================================
Yukarıdaki örnekği incelediğimizde --Buton1-- Metodunu tetiliyor.Standart tetikleme yöntim hepimiz biliyoruz.Yalnız şöylebir nokta var, programda threading(yani kanallama) yöntimi kullandığınızda program normal olarak hata verecektir.Çünkü programa çalışma esnasında müdahale ediyorsunuz. Bunu çömek için iki yöntem var.
1.si Sınıfın(form-buton vs. hangi sınıfı kıllanıyorsanız ) Checkforillegalcrossthreadcalls=false; properties'ini false yapmak.Bu önerilmez.Neden diye sorarsanız sınıfa dışarıdan  illegal bir müdahaleyi aktifleştirmiş olursunuz. 2.si ise Sınıfın Invoke() metodunu kullanırsınız. Bu güvenilir ve sağlam olanı.Aşağıdaki örneği inceleyin.
======================================================================
Örnek 2---->
public partial class MainForm : Form
    {
        public MainForm()
        {
            InitializeComponent();
        }
        void Button1Click(object sender, EventArgs e)
        {
            MessageBox.Show("Buton 1 Tetiklendi :D");
        }
        void Button2Click(object sender, EventArgs e)
        {
   //      ----Önemli Olan Nokta----- Yani Buton1'in tetiklendiği yer!!
            button1.Invoke(new EventHandler(Button1Click));
  //      ----Önemli Olan Nokta----- Yani Buton1'in tetiklendiği yer!!
        }
    }

Yukarıdaki örnekte direkt olarak metodu tetikledik.Yani herhangibir obje veyahut event args oluşrurmadık.Kendiniz event args veya obje oluşturmak istiyorsanız 3. örneği kullanın.
======================================================================
Örnek 3---->
public partial class MainForm : Form
    {
        public MainForm()
        {
            InitializeComponent();
        }
        void Button1Click(object sender, EventArgs e)
        {
            MessageBox.Show("Buton 1 Tetiklendi :D");
        }
        void Button2Click(object sender, EventArgs e)
        {
            object obj=new Button();//kendimiz bir obje oluşturuyoruz istersekte dolduruyoruz.
            EventArgs f=new EventArgs();//kendimiz bir eventargs oluşturuyoruz

   //      ----Önemli Olan Nokta----- Yani Buton1'in tetiklendiği yer!!
            button1.Invoke(new EventHandler(Button1Click),new object[]{obj, f});
  //      ----Önemli Olan Nokta----- Yani Buton1'in tetiklendiği yer!!

        }
    }
======================================================================
illaki butonu veya sınıfın delegelerini kullanmak gibi bi zorunluluğunuz yok aşağıya bir örnek daha vereyim buda bi client serve uygulamasının bir kısmı.

private void ReceiveMessages()
     {
       if (ConResponse[0] == '1')
               this.Invoke(new UpdateLogCallback(this.UpdateLog), new object[] { "Connected     Successfully!" });
     }

private void UpdateLog(string strMessage)
    {
            txtLog.AppendText(strMessage + "\r\n");
    }
Kolay gele :D

24 Mayıs 2014 Cumartesi

C sharp AppSetting yazma ve okuma

Windows app projelerinize Appsetting dosyalarını yazma ve okuma metodları.

using System;
using System.Configuration;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            HepsiniOkuSettings();
            OkuSetting("Setting1");
            OkuSetting("NotValid");
            AddUpdateAppSettings("YeniAyar", "Nis 7, 2014");
            AddUpdateAppSettings("YeniAyar1", "Ocak 8, 2014");
            HepsiniOkuSettings();
        }

        static void HepsiniOkuSettings()
        {
            try
            {
                var appSettings = ConfigurationManager.AppSettings;

                if (appSettings.Count == 0)
                {
                    Console.WriteLine("AppSettings is empty.");
                }
                else
                {
                    foreach (var key in appSettings.AllKeys)
                    {
                        Console.WriteLine("Key: {0} Value: {1}", key, appSettings[key]);
                    }
                }
            }
            catch (ConfigurationErrorsException)
            {
                Console.WriteLine("Hata AppSetting Dosyasına Yazdırılamadı");
            }
        }

        static void OkuSetting(string key)
        {
            try
            {
                var appSettings = ConfigurationManager.AppSettings;
                string result = appSettings[key] ?? "Not Found";
                Console.WriteLine(result);
            }
            catch (ConfigurationErrorsException)
            {
                Console.WriteLine("Hata AppSetting Dosyasına Yazdırılamadı");
            }
        }

        static void EkleUpdateAppSettings(string key, string value)
        {
            try
            {
                var configFile = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
                var settings = configFile.AppSettings.Settings;
                if (settings[key] == null)
                {
                    settings.Add(key, value);
                }
                else
                {
                    settings[key].Value = value;
                }
                configFile.Save(ConfigurationSaveMode.Modified);
                ConfigurationManager.RefreshSection(configFile.AppSettings.SectionInformation.Name);
            }
            catch (ConfigurationErrorsException)
            {
                Console.WriteLine("Hata AppSetting Dosyasına Yazdırılamadı");
            }
        }
    }
}
Çıktısı:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0" />
    </startup>
  <appSettings>
    <add key="Setting1" value="May 5, 2014"/>
    <add key="Setting2" value="May 6, 2014"/>
  </appSettings>
</configuration>

Alıntı:MSDN Kütüphane
sadece öğrenmek amaçlıdır.ticari amaç için kullanılamaz.

Stok Cari Windows App. Ver:003

Yenilikler:Koleksiyon sınıfları Datagrid componentine dinamik olarak ayarlandı. burada dikkat etmeniz gereken hem biçimsel olarak sınıf ayarlaması yapıldı.Hemde koleksiyon olarak ayarlandı,yani, Datagrid veritabanıyla ilişkilendirilmedi.<--- Dikkat etmeniz gereken ve olması gereken bu.
Xmldoc. xmlwriter vb. sınıflar yerine Xmlserializer sınıfı kullanıldı,yani serializasyon kullanıldı.

Link:Yandex

23 Mayıs 2014 Cuma

22 Mayıs 2014 Perşembe

19 Mayıs 2014 Pazartesi