#REGİON KULLANIMI C#

  " Bu yazımda kod okunurluğunu arttırmak için kullanılan #region'u inceleyeceğim.

Kod içerisinde okunurluğu arttırmak için kodlarımızı düzenlemek istersek ve bu kodları bloklar halinde saklamak istersek bu komutu kullanabiliriz.
Yapmamız gereken ise blok haline getirmek istediğimiz kodun başına #region ve başlık sonuna ise #endregion yazmamızdır.
Şimdi bunu aşağıdaki örnekte inceleyelim.
Gördüğünüz gibi Araba sınıfı içerisinde yer alan metotlar Metotlar adında bir region tarafından blok haline getirilmiştir.
Bir Visual Studio projesi açıp bunu yaptığınızda #region'un yanında bulunan - ikonuna basarsanız kodlar gizlenecek ve sadece Metotlar başlığı gözükecektir.
+ ikonuna bastığınızda tekrar kodlarınızı görebilirsiniz.

CRM - KISACA CRM



  • Doğru ürün ya da hizmeti, doğru müşteriye, doğru fiyatla, doğru yerde ve doğru zamanda sunmaktır.
  • Etkili pazarlama / satış ve servis süreçlerini yöneten müşteri merkezli bir iş felsefesi ve kültürüdür.
  • Uzun süreli ve kazançlı müşteri ilişkilerini oluşturan ve muhafaza eden bir iş stratejisidir.
  • Müşteriyi tanımak, müşteri ihtiyacını anlamak, ona uygun hizmetler ve ürünler geliştirmek ve bu bilginin organizasyon içinde paylaşılmasıdır.
  • Adamına göre muameledir.
  • Hem bir Front Office otomasyonudur. ( Satış, pazarlama ve müşteri hizmetleri vs…)
  • Hem de bir Back Office otomasyonudur. (Muhasebe, üretim, lojistik, planlama vs…)

CRM'in Amaçları

  • Müşteri başına karlılığının arttırılması
  • Ürünler arası çapraz satış miktarının arttırılması
  • Satış tekliflerinin daha hızlı ve daha yüksek oranda siparişe dönüştürülmesi
  • Hedef kitlenin ve potansiyel müşteri sayısının arttırılması
  • Pazarlama ve satış döngülerinin kısaltılması ve basitleştirilmesi
  • Müşterilere doğru cevabın daha hızlı ulaştırılabilmesi
  • Müşteri memnuniyetini ve sadakatini arttırmak

Neden CRM?

Knowledge Systems & Research Inc. firması tarafından gerçekleştirilen araştırmada belirtildiği üzere yıllık satışları 300 Milyon Amerikan doları olan 110 firmanın üst düzey yöneticilerine göre
CRM'in sağladığı faydaların bazıları;
  • Müşteriyi edinmek % 16 - % 27 (sadece Tüketiciler)
  • Müşteri elde tutmak % 47
  • Müşteri başına karlılığı artırdı % 73
  • Müşteri başına satışı artırdı % 57
  • Müşteri sayısını artırdı % 46
olarak ifade edilmiştir.

CRM - CRM anlamanın mantığı!



CRM (CRM: Customer Relationship Management) Müşteri İlişkileri Yönetimi anlamına gelen, müşteriyi yakından tanıyıp, müşteriye göre üretmek ve hizmet vermek amacı ile uygulanan sistemdir. CRM’in temel mantığı iletişim ve haberleşmedir.
Konuyu biraz daha açıklamamız ve örnek vermemiz gerekirse;
Bir banka kartınız var, bankamatikten para çekerken sorun yaşıyorsunuz, doğal olarak 444 0 XXX gibi destek hattını arıyor ve sorununuzu dile getiriyorsunuz. Telefona bakan personel sizin kimlik bilgilerinizi onayladıktan sonra sizin, banka hangi şubesine, hesap açışınızdan, kartı hangi bankamatik şubesine taktığınızı ve yaptığınız işlemleri görebiliyor. Bu sayede sizi daha iyi anlıyor ve sorunları hemen çözebiliyor.
Eğer böyle bir şey olmasaydı ne olurdu? “
Müşteri: efendim ben bankamatiğe kartımı soktum, para gelmedi.
Call Center: Beyefendi, hangi şubeye gittiniz?
Müşteri: Eminönü şubesine gittim.
Call Center: Beyefendi, Hesabınızda para var mıydı?
Müşteri: Dayımın oğlunun bana borcu vardı, gönderdim dedi.
Call Center: Beyefendi, Hesabınız Dolar, Euro, TL hangisi.
Müşteri: TL hesabım var.
Call Center: Beyefendi,  Eminönü şubesi ile görüşüp size bilgi vereceğim.
Müşteri: Yaw, para diyorum para, yok eve gidecem yok!
Call Center: Beyefendi, Bizde burada çalışanız efendim ne yapalım!
Müşteri: ….

Sonuç olarak müşteri mağdur, Call Center karışık ezbere bir iş yapılmakta. Peki, iyi bir otomasyon sistemine CRM sistemi dâhil edilseydi ne olurdu? “
Müşteri: efendim, ben bankamatiğe kartımı soktum, para gelmedi.
Call Center: Beyefendi, saat 3 gibi sistem yaşanan bir sorun nedeni ile 30 dakikalık bir bağlantı sorunu yaşanmıştır. XXX XXX kişi tarafından hesabınıza 500 TL para transferi edilmiş ve xx-xx-xxxx tarihinde yaptığınız bir alış veriş sonucunda 40 TL hesabınızdan düşülmüştür. 


Günümüzde çeşitli sektörlerin teknolojik alt yapıları ile CRM sistemi uygulanmaktadır. Ama sektör farklılıkları sebebi ile tam bir CRM sistemi otomasyonu piyasaya çıkmamıştır. İsmi lazım olmayan büyük firmalar kendi otomasyonlarına bağlı CRM sistemleri kullanmaktadırlar ama birçok firma CRM sistemini kullanmaktadır. Hatta bu oran kullanan ile kullanmayanlar arasında kıyaslandığında kullananların sayısı 2012 itibari ile yok sayılacak kadar az.
Yaptığım gözlemler sonucunda gördüğüm kadarı ile CRM sistemi bazı firmalar tarafından hazır bir paket sunmaktadır ama firma sahiplerinin unuttuğu bir şey var, CRM otomasyon sistemleri ile entegreli çalışmalıdır. Eğer entegreli çalışmaz ise bir excel programından farkı kalmaz.

Konuyu toplamamız gerekirse; CRM’in hedefi;
•    Müşterilere iyi hizmet vermek
•    Müşteriyi anlamak
•    Müşteriye anında cevap vermek
•    Müşteriye yönelik çalışmalar
•    Müşteri memnuniyeti ve karlılık oranının artması
•    Kısacası kusursuz müşteri hayranlığı!

CRM - CRM Nedir?



CRM Nedir?


CRM kavramının temelinde müşteriyi anlamak, onun ihtiyaçları doğrultusunda ürün ve hizmetlerini özelleştirip mevcut müşterilerine daha iyi hizmet sunarken, yenilerini kazanmanız yatar. Özellikle son yirmi yılda değişen müşteri istekleri, servis beklentileri hakkında detaylı bilgi alıp, firmanız için en uygun CRM çözümünü bulmak size rekabette önemli bir avantaj sağlayacaktır. Müşteri odaklı çalışamayı ve hedeflerinizi yakalamak doğru çözümü, doğru şekilde uygulamaktan geçiyor.

CRM NEDİR?

Müşteri ilişkileri yönetimi ya da çok popüler kısaltması ile CRM, son birkaç yılda, her ölçekten şirketin stratejik ajandasında yer alan bir yatırım. Üzerine binlerce rapor yazılan, milyarlarca dolar yatırım yapılan ve hala gelişmeyi sürdüren bu alan acaba iş dünyası için neler vaat ediyor?
Öncelikle CRM pazarının son yıllarda nasıl bir gelişme sürecinde olduğuna bakıldığında karşımıza iş dünyasının yaşadığı büyük değişim çıkıyor. Dünyada, hemen hemen tüm pazarlarda rekabetin arttığı, ürünlerin pazara girme sürelerinin kısaldığı ve marjların düştüğü bir ortamda müşteriye daha etkin ulaşmak, müşterinin isteklerini anlayarak ürün ve hizmetleri bu yönde şekillendirmek büyük önem taşıyor. Tüm bu ihtiyaçlar çerçevesinde CRM pazarı hızla gelişmeyi sürdürüyor. Dünyaca ünlü araştırma şirketlerinin rakamları da bu büyümeyi net biçimde ortaya koyuyor. Aberdeen Reseach’e göre dünyada CRM yazılımları ve hizmetleri pazarı 2003 yılında 23 milyar dolarlık bir hacme ulaştı. Bu konuda biraz daha iddialı bir rakam ortaya koyan IDC ise 2005 yılı sonunda CRM yazılımları ve hizmetleri alanında elde edilecek gelirlerin tüm dünyada 162 milyar dolara çıkacağını öngörüyor.

Önce Müşteri…

CRM’in C’si yani müşteri (customer) kavramının son yıllarda yaşadığı değişim gerçekten inanılmaz boyutlara ulaştı. Tarihsel süreç açısından bakıldığında 1950’li yılların “Ne bulursam onu alırım” yaklaşımıyla geçtiğini görürüz. Arz ekonomisinin ön planda olduğu bu dönemlerde pazarda yer alan ürün ve hizmetlerin çeşitliliğindeki sınırlamalar, tüketici tercihlerinin geri plana atılmasına zemin hazırlıyordu. Ardından 1970’li yıllar geldi ve ürün ve hizmet çeşitliliği artmaya başladı. Bu noktada müşterilerin genel eğilimi “Neyi alabilirsem onu alayım” biçiminde değişti. 1990’larla birlikte artık “ne istersem onu alırım” dönemi başladı. bu yeni döneme gelinmesinde birkaç temel nokta büyük rol oynadı.
  • Ürün ve hizmetlerim çeşitliliği inanılmaz biçimde arttı ve müşterilerin tercih olasılıkları çoğaldı.
  • Bilgi ve iletişim teknolojilerini etkin kullanan müşteriler, bilgiye, rakibe ve muadil ürünlere çok kolay erişebilir bir hale geldi.
  • Teknolojik yapılar, ürün ve hizmetlerin pazarlanmasından dağıtım kanalına dek iş süreçlerini değiştirdi.
  • Müşterilere çok farklı kanallardan erişim mümkün oldu.
Aslında CRM, çok da yeni bir kavram değil. CRM kısaltması ABD medyasında 1989 yılında sadece birkaç defa geçmesine karşın 2000 yılında bu rakam 14 bine ulaşmıştı. Hangi dönemde olursa olsun, vizyon sahibi yöneticilerin tümü müşterileri anlamanın işlerini geliştirmek için ne kadar faydalı olduğunun bilincinde olmuştur. 50 sektör üzerinde yapılan bir araştırmaya göre 1923 yılında sektöründe lider olan şirketlerin 43’ü bugün hala o sektörlerin liderleri. Ve bu şirketlere bakıldığında hepsinin müşteriyi anlamaya ciddi yatırımlar yapan ve müşteri odaklı çalışan şirketler oldukları görülüyor.
CRM’in bugünkü boyutuna temel oluşturan güzel örneklerden bir tanesi de eski mahalle bakkalları… Müşterilerinin neredeyse tamamını ismen tanıyan, ürünlerden hangilerini ne şekilde tercih ettiğini bilen bu bakkallara gönderme yapan Meta Group analisti Liz Shahnam CRM’i şöyle tanımlıyor:
“CRM pek de yeni olmayan bir kavram. Yeni olansa geçmişte mahalle bakkalımızla yapabildiğimizi olası kılan teknoloji... O bakkalın az sayıda müşterisi ve herkesin tercihlerini aklında tutabilecek güçte hafızası vardı. Teknoloji, işte bu modelin gerçekleşmesini sağladı."
Örnekler bir yana, genel bir tanımını yapmak gerekirse; CRM, karşılıklı, uzun vadeli bir değer ilişkisi yaratmak için müşteriler ile gerçekleştirilen ilişkilerin etkin biçimde yönetilmesidir. CRM; satış, pazarlama ve hizmet süreçlerinin müşteri odaklı bir felsefe etrafında yeniden tanımlanmasını gerektirir. 

C# - XBALL OYUNU ve MOUSE KONTROLÜ


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

namespace xball
{
    public partial class Form1 : Form
    {
        ArrayList kutucuklar = new ArrayList();
        Timer timer1;
        Random rdn;
        Button btnTop;

        int yerX = 5,yerY=5;
        int kutuSayisi = 5;//kırılan kutusayısı
        int Hak = 3;
        int Level = 1;
        int hareket = 5;

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            this.KeyPreview = true;
            this.KeyDown += new KeyEventHandler(Form1_KeyDown);
            this.MouseMove += new MouseEventHandler(Form1_MouseMove);
            this.Text = "Seviye : " + Level.ToString() + "   Kalan hakkınız :" + Hak.ToString();
            Yenile();
            kutucuklarOlustur();
            timer1.Tick += new EventHandler(timer1_Tick);

            //MessageBox.Show("kontrolLeft" +kontrol.Left +"\nkontrolRight" +kontrol.Right + "\nkontrolBottom" +kontrol.Bottom + "\nkontrolTop" + kontrol.Top);
        }

        void Form1_KeyDown(object sender, KeyEventArgs e)
        {

            if (e.KeyCode == Keys.A)
                kontrol.Left = kontrol.Left - 50; //yon tuslarıyla hareket calısması 
            else if (e.KeyCode == Keys.D)      //mouse ekranda olmazsa calısıorrrr ama mouse kadar iyi degil
                kontrol.Left = kontrol.Left + 50;
                
        }

       
        void timer1_Tick(object sender, EventArgs e)
        {
            xballHareket();
            carpmaDenetimi();
            oyunBittiMi(sender, e);
            KalanHak(sender, e);
        }

      void Form1_MouseMove(object sender, MouseEventArgs e)
        {
           
           if( e.X <350)
            kontrol.Left = e.X;
            //kontrol.Top = e.Y; //yukarıya hareket eder alttaki buton
       }

        private void Yenile()
        {
            int x, y;

            timer1 = new Timer();
            timer1.Enabled = true;
            timer1.Interval = 5;

            rdn = new Random();
             x = rdn.Next(0, 50);
             y = rdn.Next(150, 250);

             kutuSayisi = 5 * Level;  //bes tane yeyınce level atlıor.

            xball.Location = new Point(x, y);

            yerX = 1 + Level * 1;
            yerY = -1 - Level * 1;
            if (yerX < 0)
                hareket = yerX * -1;
            else
                hareket = yerX;
        }

        private void KalanHak(object sender, EventArgs e)
        {
            if (xball.Bottom > kontrol.Bottom )// && (xball.Right >= kontrol.Left) && (xball.Left <= kontrol.Right))//&&
        
            {
                Hak--;
                
                for (int i = 0; i < kutucuklar.Count; i++)
                {
                    Button btn = ((Button)kutucuklar[i]);
                    ((Button)kutucuklar[i]).Dispose();
                }
                kutucuklar.Clear();
                timer1.Enabled = false;

                DialogResult dr = DialogResult.None;

                if (Hak > 0)
                {
                    dr = MessageBox.Show("Yandınız. Kalan hakkınız : " + Hak.ToString());
                  
                    if(dr ==DialogResult.OK)
                        Form1_Load(sender, e);
                }
                else if (Hak == 0)
                {
                    MessageBox.Show("GameOver");
                    this.Close();
                }
            }
        }

        private void oyunBittiMi(object sender, EventArgs e)
        {
            DialogResult dr = DialogResult.None;
            if (kutuSayisi == 0)
            {
                timer1.Enabled = false;
                dr = MessageBox.Show("Tebrikler. Seviye " + Level + " Bitirdiniz. ");
                Level++;
            }
            if (dr == DialogResult.OK)
                Form1_Load(sender, e);
        }

        private void xballHareket()
        {
            if (this.ClientSize.Width <= xball.Right)
                yerX = yerX * -1;
            if (0 >= xball.Left)
                yerX = yerX * -1;
            if (this.ClientSize.Height<= xball.Bottom)
                yerY = yerY * -1;
            if (0 >= xball.Top)
                yerY = yerY * -1;
            if (xball.Bottom >= kontrol.Top + 5 && xball.Right >= kontrol.Left && xball.Left <= kontrol.Right)
                yerY = yerY * -1;

            xball.Location = new Point(xball.Left + yerX, xball.Top + yerY);
        }

        private void kutucuklarOlustur()
        {
            for (int j = 0; j < Level; j++)
            {
                for (int i = 0; i < 14; i++) //14 ekrandaki buton sayısı
                {
                  btnTop = new Button();

                    btnTop.Name = i.ToString();
                    btnTop.Location = new Point(10+i*30, j*30 );
                    btnTop.Width = 20;
                    btnTop.BackColor = Color.Black;
                    this.Controls.Add(btnTop);
                    kutucuklar.Add(btnTop);
                }
            }
        }

        private void carpmaDenetimi() 
        {
            Rectangle r = new Rectangle();
            Rectangle t = new Rectangle();

   t.X=xball.Left;
                t.Y=xball.Top;
                t.Height=xball.Height;
                t.Width=xball.Width;

            for (int i = 0; i < kutucuklar.Count; i++)
{
                Button btn =((Button)kutucuklar[i]);
   r.X=btn.Left;
                r.Y=btn.Top;
                r.Height=btn.Height;
                r.Width=btn.Width;
                if (r.IntersectsWith(t))
                {
                    kutuSayisi--;

                    kutucuklar.RemoveAt(i);
                    if (yerY > 0 && yerX >0)
                    {
                        if (btn.Top <= xball.Bottom && btn.Left < xball.Right - hareket)
                            yerY = yerY * -1;
                        else
                            yerX = yerX * -1;
                    }
                    else
                        if (yerY > 0 && yerX < 0)
                        {
                            if (btn.Top <= xball.Bottom && btn.Right > xball.Left + hareket)
                                yerY = yerY * -1;
                            else
                                yerX = yerX * -1;
                        }
                        else
                            if (yerY < 0 && yerX > 0)
                            {
                                if (btn.Bottom >= xball.Top && btn.Left < xball.Right - hareket)
                                    yerY = yerY * -1;
                                else
                                    yerX = yerX * -1;
                            }
                            else
                                if (yerY < 0 && yerX < 0)
                                {
                                    if (btn.Bottom >= xball.Top && btn.Right > xball.Left + hareket)
                                        yerY = yerY * -1;
                                    else
                                        yerX = yerX * -1;
                                }


                    btn.Dispose();
                }
}
        }
    }
}

C# DA ARRAYLİST SINIFININ KULLANIMI


ArrayList C#’ta bir class’dır. Diğer classlar gibi Arraylist’i de kullanabilmemiz için yavru değişkenini türetmeliyiz. Arraylist aslında bir dizidir.Fonksiyonlar çalışırken arkaplanda birden fazla dizi çalışır. Arraylist’i bir otosbüsü bekleyen yolcu kuyruğuna benzetebiliriz. En son gelen en arkaya geçer. Arraylist için de böyledir. En son eklenen eleman en son indisli elemandır. Eleman eklendikçe Arraylist de büyür, eleman sayısında bir sınırlama yoktur. Arraylist’in eleman türü object’tir. Bunu ilk örnekte daha iyi anlayacaksınız. Arraylist için şimdilik bu ön bilgiler yeterli. İsterseniz hemen Arraylist fonksiyonlarına geçelim.
ArrayList oluşturabilmek için projemize using System.Collections kodunu da eklemeliyiz. Bu kodla System.Collections kütüphanesini çağırmış oluruz.
Add Fonksiyonu:
ArrayList class’ından oluşturduğumuz yavru değişkene bir eleman eklemek için kullanılır. 


private void button1_Click(object sender, EventArgs e)

{


   ArrayList diziListe = new ArrayList();

   int[] dizi = new int[5] { 1, 2, 3, 4, 5 };
diziListe.Add(dizi[2]);// diziListe'nin ilk elemanı 3 olur


   diziListe.Add(12); // diziListenin ikinci elemanı 12 olur

   diziListe.Add("kelime"); // dizilistenin üçüncü elemanı kelime stringi olur


   this.Text = diziListe[0].ToString();// Form'un başlığına 3 yazar

   this.Text = diziListe[1].ToString();// Form'un başlığına 12 yazar


   this.Text = diziListe[2]; // Form'un başlığına kelime yazar

}
Burada dikkat edilmesi gereken ilk nokta Add fonksiyonu ile Arraylist’e aynı anda sadece bir eleman ekleyebilmemiz. İkinci önemli nokta ise hem bir integer değeri ekledik hem de bir string değeri ekledik. Buradan da analaşılacağı üzere oluşturduğumuz Arraylist’e object türünde değerler atabiliyoruz. Mesela biz burda diziListe isimli yavru değişkene bool, double, float, string, byte, hatta Button, listBox türünde nesneler de ekleyebiliyoruz çünkü object türü değişken hepsini kapsayabiliyor.
AddRange Fonksiyonu:
AddRange fonksiyonu Add fonksiyonuna benzemektedir. Aradaki tek fark Add ile sade bir değeri ekleyebiliyorduk. AddRange ile ise Arraylist’e bir dizinin tamamını ekleyebiliriz.


private void button1_Click(object sender, EventArgs e)

{


    ArrayList diziListe = new ArrayList();

    int[] dizi = new int[5] { 11, 21, 34, 56, 74 };


    diziListe.AddRange(dizi);
textBox1.Text = diziListe[2].ToString();// textBox1’in içine 34 yazar

}
Burada bir noktayı hatırlatalım, listBox’ın elemenları da bir dizidir. Yani şunu da yapabilirdik:
diziListe.AddRange(listBox1.Items);
Bu kod ile listBox içindeki bütün değerleri Arraylist’imizin içine ekleyebiliriz.
Clear Fonksiyonu:
Arraylist içindeki bütün elemanları silmek için kullanılan bir fonksiyondur.


private void button1_Click(object sender, EventArgs e)

{


   ArrayList diziListe = new ArrayList();

   int[] dizi = new int[5] { 11, 21, 34, 56, 74 };


   diziListe.AddRange(dizi);
diziliste.Clear();// diziListe'nin içine tamamen temizler

   TextBox1.Text = diziListe[2].ToString();// hata verir


}
Contains Fonksiyonu:
Fonksiyona parametre olarak verilen değişkenin Arraylist içinde olup olmadığına bakar. Eğer var ise true yok ise false döndürür.

private void button1_Click(object sender, EventArgs e)

{


   ArrayList diziListe = new ArrayList();

   int[] dizi = new int[5] {1,2,3,4,5 };


   diziListe.AddRange(dizi);

   if (diziListe.Contains(Convert.ToInt32(textBox1.Text))==true)


   {

        MessageBox.Show("girilen değer diziListe içinde mevcut");


   }

   else


   {

       MessageBox.Show("girilen değer diziListe içinde yok");


   }

}

Count Fonksiyonu:

Arraylist’in eleman sayısını döndüren fonksiyondur.

private void button1_Click(object sender, EventArgs e)

{


   ArrayList diziListe = new ArrayList();

   int[] dizi = new int[] {1,2,3,4,5,6 };


   diziListe.AddRange(dizi);
    textBox1.Text = diziListe.Count.ToString();//textBox1'in içine 6 yazar

}
IndexOf Fonksiyonu:
Arraylist içinde istediğimiz elemanı aramak için kullanırız. Fonksiyonun üç farklı kullanımı vardır. En genel olanı parametre olarak sadece aranan elemanın kendisini alanıdır. Eğer aranan eleman Arraylist içinde var ise elemanın indis numarasını, yok ise -1 döndürür. IndexOf fonksiyonu aramaya Arraylist’in başından başlar.

private void button1_Click(object sender, EventArgs e)

{


   ArrayList diziListe = new ArrayList();

   string[] dizi = new string[5] {"aa","bb","cc","dd","ee" };// fonksiyonun parmetresi aradığımız elemandır


   diziListe.AddRange(dizi);

   int sıra;
   sıra = diziListe.IndexOf("cc", 0, diziListe.Count - 1);


   textBox1.Text = sıra.ToString();

}
LastIndexOf Fonksiyonu:
IndexOf fonksiyonu gibi Arraylist iinde herhangi bir elemanı aramak için kullanılır. IndexOf’tan farkı aramaya sondan başlamasıdır. Elaman sayısı çok fazla olan Arraylist’lerde aradığımız eleman sonlara daha yakınsa bu fonksiyon bize hız kazandırır. Eğer aranan eleman Arraylist içinde var ise elemanın indis numarasını, yok ise -1 döndürür.

private void button1_Click(object sender, EventArgs e)

{


   ArrayList diziListe = new ArrayList();

   string[] dizi = new string[5] {"aa","bb","cc","dd","ee" };


   diziListe.AddRange(dizi);
   int sıra;
    sıra = diziListe.LastIndexOf("dd", 0, diziListe.Count - 1); // Aramaya sondan başladığı için elemanı ikinci seferde bulur. Eğer IndexOf kullansaydık elemanı üçüncü seferde bulacaktı.

   textBox1.Text = sıra.ToString();


}
Insert Fonksiyonu:
Arraylist içinde herhangi bir aralığa eleman eklemek için kullanırız. Araya eleman eklediğimiz için Arraylist’in eleman sayısı da artmış olur (tıpkı otobüs beklerken birinin araya girmesi gibi). Fonksiyonun ilk parametresine elemanı eklemek istediğimiz indis numarasını, ikinci parametreye ise elamanı yazarız.

private void button1_Click(object sender, EventArgs e)

{


   ArrayList diziListe = new ArrayList();

   string[] dizi = new string[5] { "aa", "bb", "cc", "dd", "ee" };// diziListe.AddRange(dizi);


   diziListe.Insert(2, "ff"); // diziListenin 2 numaralı indisine ff ekledik. diziListenin eleman sayısı 6 oldu.

   textBox1.Text = diziListe[2].ToString(); // textBox1'in içine ff yazar.


}
InsertRange fonksiyonu:
Fonksiyonun Insert fonksiyonunda tek farkı araya birden fazla elemanı bir seferde ekleyebilmesidir.

private void button1_Click(object sender, EventArgs e)

{


   ArrayList diziListe = new ArrayList();

   int[] dizi = new int[5] { 0, 1, 2, 3, 4 };


   diziListe.AddRange(dizi);
   int[] eklenecek=new int[3]{ 10, 11, 12 };

   diziListe.InsertRange(2, eklenecek); // diziListenin 2 numaralı indisinden sonra {10,11,12} dizisini ekledik. diziListenin eleman sayısı 8 oldu. // diziListenin son hali{0,1,10,11,12,2,3,4,5} şeklidedir.


   textBox1.Text = diziListe[2].ToString(); // textBox1'in içine 10 yazar.

}
Remove Fonksiyonu:
Fonksiyona parametre olarak girilen elemanı Arraylist’in içinde bulur ve siler. Arraylist’in eleman sayısı 1 azalmış olur.


private void button1_Click(object sender, EventArgs e)

{


   ArrayList diziListe = new ArrayList();

   int[] dizi = new int[5] { 0, 1, 2, 3, 4 };


   diziListe.AddRange(dizi);

   diziListe.Remove(3)
    textBox1.Text = diziListe[3].ToString(); // textBox1'in içine 4 yazar.


}
RemoveAt Fonksiyonu:
Remove fonksiyonundan tek farkı parametre olarak elemanı değil elemanın indis numarasını almasıdır.

private void button1_Click(object sender, EventArgs e)

{


   ArrayList diziListe = new ArrayList();

   int[] dizi = new int[5] { 7, 8, 9, 10, 11 };


   diziListe.AddRange(dizi);
   diziListe.Remove(2);

   textBox1.Text = diziListe[2].ToString(); // textBox1'in içine 10 yazar.


}
Reverse Fonksiyonu:
Arraylist’in eleman sıralamasını tersine çevirmek için kullanılır.

private void button1_Click(object sender, EventArgs e)

{


   ArrayList diziListe = new ArrayList();

   int[] dizi = new int[5] { 7, 8, 9, 10, 11 };


   diziListe.AddRange(dizi);
   diziListe.Reverse();// dizi bundan sonra {11,10,9,8,7} halini alır.

   textBox1.Text = diziListe[2].ToString(); // textBox1'in içine 9 yazar.


}
Sort Fonksiyonu:
Arraylist’in elamanlarını küçükten büyüğe doğru sıralamak için kullanılır. Eğer elemanlar string tipinde ise alfabetik sıralama yapar.


private void button1_Click(object sender, EventArgs e)

{


   ArrayList diziListe = new ArrayList();

   string[] dizi = new string[4] { "Ankara", "İzmir", "İstanbul", "Gaziantep" };


   diziListe.AddRange(dizi);
   diziListe.Sort(); //dizinin son hali {"Ankara","Gaziantep","İstanbul","İzmir"} şeklinde olur.

   textBox1.Text = diziListe[3].ToString(); // textBox1'in içine İzmir yazar.


C# İLE EXCEL DOSYASINA YAZMAK

C# ile Microsoft Office programlarına erişmek konusundaki ikinci yazımızda Excel üzerinde hangi işlemleri yapabileceğimizi inceleyeceğiz. Projemize Office bileşenini nasıl referans olarak ekleyeceğimizi ilk yazımızda1 bahsettiğimiz için bu yazımızda tekrar bahsetmeyeceğiz.Öncelikle C# ile Excel programını kullanırken, Microsoft.Office.Interop.Excel sınıfının bize sağladığı ve çok kullanacağımız birkaç nesneden bahsetmek istiyorum.

Workbook: Microsoft Excel çalışma kitabını temsil eder.
Worksheet: Çalışma kitabı içindeki çalışma sayfalarını temsil eder.
Range: Bir çalışma sayfasında bir veya daha fazla hücrenin oluşturduğu alanı temsil eder. 
      Programda ilk yapmamız gereken şey “using Microsoft.Office.Interop.Excel” satırını eklemektir. 
      ApplicationClass ExcelUyg = new ApplicationClass(); 
Satırı ile yeni bir excel uygulamsı çalıştırıyoruz, görev yöneticisini takip ederek de bu işlemi görebilirsiniz. Çalıştırdığımız excel uygulamasını sonlandrımak için ise 
      ExcelUyg.Quit(); 
komutunu kullanıyoruz. 

C# ile excel proglamlamaya giriş

Excel programı üzerinde yeni bir çalışma kitabı oluşturmak için aşağıdaki kod yeterli olacaktır. 
      object Missing = Type.Missing;     
      ApplicationClass ExcelUyg = new ApplicationClass();     
      ExcelUyg.Visible = true;     
      Workbook calismaKitap = ExcelUyg.Workbooks.Add(Missing); 
Açıtığımız çalışma kitabını üzerinde işlem yapmak için, çalışma kitabındaki ilk çalışma sayfasını kullanacağız. İlk çalışma sayfasına erişmek için kullanacağımız kod şu şekilde 
      Worksheet calismaSayfa = (Worksheet)calismaKitap.Worksheets[1]; 
Unutmayalım ki Office nesneslerinin indexleyicileri 1 den başlar yani Worksheets[0] şeklinde kullanırsak program hata üretecektir.Artık çalışma sayfası üzerinde değişiklik yapmaya hazırız.

C# ile excele veri aktarma

Beklenenin aksine Excel’e ait bir hücre(cell) sınıfı yoktur. Bu nedenle hücreleri object anahtar kelimesini kullanarak tanımlayacağız. 
      object Hucre_1 = calismaSayfa.Cells[1, 1];     
      object Hucre_2 = calismaSayfa.Cells[1, 3];     
      Range Alan = calismaSayfa.get_Range(Hucre_1, Hucre_2);     
      Alan.MergeCells = true;     
      Alan.Value2 = "C# ile Excel"
Burada Hucre_1 değişekenine çalışma sayfasında 1. Satır ve 1. Sütundaki hücreyi (A1 hücresi), ve Hucre_2 değişkenine de çalışma sayfasında 1. Satır ve 2. Sütundaki hücreyi (C1 hücresi) atadık, ve A1 hücresinden C1 hücresine kadar olan alanı Bolge değişkenine atadık. Bu alandaki hücreleri birleşitirdik ve “C# ile Excel” metnini yazdık.

C# ile Excel hücrelerini biçimlendirmek

Muhtemelen sadece yazmak yetmeyecek, ayrıca yazdığımız metni biçimlendirmek isteyeceğiz. Excel’de renk atamak için System.Drawing.Color kullanılmaz bunun yerine renk önce tam sayıya dönüştürülmelidir. Bunun için rengi kırmızı tonu 65536, yeşil tonu 256 ile çarpılır ve mavi tonu ile toplanır. Bunun için basit bir fonksiyon kullanabiliriz.
      int RengiSayiyaCevir(Color color)
      {           
            return color.B*256*256 + color.G*256 + color.R;
      }
Bir alan üzerinde kullanabileceğimiz temel font özellikleri aşağıdaki gibidir. Burada dikkat etmemiz gereken, Font.Bold, Font.Italic boolean değil de tamsayı olarak tanımlanmış olması. 1 değerini true, 0 değerini false anlamında kullanabiliriz.
      Alan.Font.Color = RengiSayiyaCevir(Color.Red);
      Alan.Font.Name = "Courier New";
      Alan.Font.Size = 22f;
      Alan.Font.Bold = 1;
      Alan.Font.Italic = 1; 
Alanın kenarlığını bir seferde tanımlayabileceğimiz gibi, her kenar için farklı kenarlıkda verebiliriz. 
      Alan.BorderAround(XlLineStyle.xlContinuous, XlBorderWeight.xlThin, XlColorIndex.xlColorIndexNone , null);
      Alan.Borders[XlBordersIndex.xlEdgeRight].LineStyle = XlLineStyle.xlDouble;
      Alan.Borders[XlBordersIndex.xlEdgeRight].Color = RengiSayiyaCevir(Color.Blue);
      Alan.Borders[XlBordersIndex.xlEdgeRight].Weight = XlBorderWeight.xlMedium; 
Alan içerisindeki metni istediğmiz gibi hizalayabiliriz. 
      Alan.VerticalAlignment = XlVAlign.xlVAlignCenter;
      Alan.HorizontalAlignment = XlHAlign.xlHAlignCenter;

C# ile DataGridView içindeki verileri Excel’e taşımak

Bu işlem için yuklarıda yazdığımız kodları kullanarak basit bir fonksiyon yazacağız. 
      void ExceleAktar(Worksheet sayfa, DataGridView dgv)
      {
            for (int i = 0 ;i < dgv.Rows.Count; i++)
            {
                  for (int j = 0; j < dgv.Columns.Count; j++)
                  {
                        object Hucre = sayfa.Cells[i+1, j+1];
                        Range Alan = sayfa.get_Range(Hucre, Hucre);
                        Alan.Value2 = dgv[j, i].Value;
                  }
            }
     
Burada Excelde hücreler için satır ve sütun sayısı birden başladığı için Hucre değişkenine atama sırasında i+1 ve j+1 kullandık. Bu fonksiyonumuzu test ekmek için form üzerinde bir DataGridView ekleyerek aşağıdaki kodu çalıştırıyoruz. 
      void ExcelUygulamasi()
      {
            object Missing = Type.Missing;
            ApplicationClass ExcelUyg = new ApplicationClass();
        ExcelUyg.Visible =
true;
            Workbook calismaKitap = ExcelUyg.Workbooks.Add(Missing);
            Worksheet calismaSayfa = (Worksheet) calismaKitap.Worksheets[1];
            DataGridViewDoldur();
            ExceleAktar(calismaSayfa, dataGridView1);
      }
      void DataGridViewDoldur()
      {
            dataGridView1.Columns.Clear();
            dataGridView1.Columns.Add("A", "A");
            dataGridView1.Columns.Add("B", "B");
            dataGridView1.Columns.Add("C", "C");
            dataGridView1.Columns.Add("D", "D");
            dataGridView1.Columns.Add("E", "E");
            dataGridView1.Columns.Add("F", "F");
            dataGridView1.Columns.Add("G", "G");
            Random rnd = new Random();
            for (int i = 0; i < 8; i++)
                  dataGridView1.Rows.Add(rnd.Next(100), rnd.Next(100), rnd.Next(100), rnd.Next(100), rnd.Next(100), rnd.Next(100), rnd.Next(100));
      }
Burada DataGridView içerisine rasgele veriler ekleyip bunu excel dosyamıza gönderiyoruz. Bu verileri daha sonra Excel’de formul yazmak ve grafik çizmek için kullanacağız. Bu veriler için sütun bazında ortalama alan formülü yazalım.

C# ile Excel Formülleri ve Grafikleri

                        for (int i = 1; i < 8; i++)
      {
            object Hucre_1 = calismaSayfa.Cells[1, i];
            object Hucre_2 = calismaSayfa.Cells[8, i];
            object Hucre = calismaSayfa.Cells[10, i];
            Range Alan = calismaSayfa.get_Range(Hucre, Hucre);
            Range rng = calismaSayfa.get_Range(Hucre_1, Hucre_2);
            Alan.Formula = ExcelUyg.WorksheetFunction.Average(rng, Missing, Missing, Missing, Missing, Missing, Missing, Missing, Missing, Missing, Missing, Missing, Missing, Missing, Missing, Missing, Missing, Missing, Missing, Missing, Missing, Missing, Missing, Missing, Missing, Missing, Missing, Missing, Missing, Missing);
      }    
ExcelUyg.WorksheetFunction altındaki fonksiyonların alacağı parametre sayısı sabittir, eğer bizim ihtiyacımızdan  fazlası mevcut ise bunları daha önce tanımladığımız Missing değişkeni ile tamamlayabiliriz. Burada Alan ile tanımladığız hücreye, rng ile tanımladığımız bölgedeki sayıların ortalamasını hesaplayan formül ekledik. Şimdi aynı verileri kullanarak grakik çizelim. 
      _Chart grafik1 = (Chart)calismaKitap.Charts.Add(Missing, Missing, Missing, Missing);
      object Hucre_1 = calismaSayfa.Cells[1, 1];
      object Hucre_2 = calismaSayfa.Cells[1, 7];
      Range Alan = calismaSayfa.get_Range(Hucre_1, Hucre_2);
      grafik1.SetSourceData(Alan, XlRowCol.xlRows);grafik1.ChartType = XlChartType.xlPie;
      grafik1.Location(XlChartLocation.xlLocationAsObject, calismaSayfa.Name);

Excel dosyalarını yazdırma

      PrintDialog printDialog = new PrintDialog();
      if (printDialog.ShowDialog() == DialogResult.OK)
      {
            calismaSayfa.PrintOut(Missing, Missing, printDialog.PrinterSettings.Copies, False, printDialog.PrinterSettings.PrinterName,printDialog.PrinterSettings.PrintToFile, printDialog.PrinterSettings.Collate, printDialog.PrinterSettings.PrintFileName);
      }

Excel dosyalarını kaydetme

                        object False = false;
      object True = true;
      XlFileFormat format = XlFileFormat.xlWorkbookDefault;
      calismaKitap.SaveAs("C:\\yeni.xlsx", format , Missing, Missing, Missing, False, XlSaveAsAccessMode.xlNoChange, Missing, False, Missing, Missing, Missing );  
Excel ile yapabileceklerimiz çok daha fazla olsada şimdilik bunula yetineceğiz.