KMRT BSRN

"Hiç kimsenin ilgisine ihtiyaç duymadığın gün olgunlaşırsın. Hiç kimseden beklentiye girmediğin gün yara almazsın. Ve hiç kimseye bağımlı kalmazsan kazanırsın." OSHO

C# – Quick Cut-Copy-Paste For Textboxes (Hızlı Kes-Kopyala-Yapıştır)

3 Yorum


Her uygulama için olmazsa olmazlardan biri hatta üç’ü Kes-Kopyala-Yapıştır işlemleridir. Kullanıcılar gerek metin kutuları üzerinde gerekse uygulamadan dışarıya bir çok Kes-Kopyala-Yapıştır işlemi yaparlar. Tabii en azından ben yapıldığını düşünüyorum. Bir yazılım geliştirici olarak da en çok sıkılarak yaptığım işlerden biri bu işlemleri, yani her uygulamada olması gereken temel işlemlerin gerçekleştirilmesidir. Kes-Kopyala-Yapıştır işlemleri bunlardan biri. Aynı şekilde klavye kısayolları, tab-order işlemleri vs bunlarda benim biraz sıkılarak yaptığım işlemler..

İşte yine böyle düşündüğüm bir gün, aklıma bu işi otomatik olarak yapabilecek bir kod geliştirebilirsem bu sıkıntı süreci kolayca atlatabilirim diye düşündüm. Tabii öyle bir kod olmalı ki, oluşturduğum kullanıcı arayüzlerinde her bir metin kutusu(Textbox) için kod yazmamalıyım. Her uygulamada kullanabileceğim bir kodum olsun. Bu kodu  yaniilgili yere yapıştırayım ve arayüzdeki(Form ya da Kullanıcı kontrolü(UserControl)) tüm metin kutularını(Textbox) etkilesin. Tabii bu öyle bir şey olmalı ki görselliği de olmalı. Yani uygulamayı zenginleştirmelidir. Diye düşünerek kolları sıvadım. 🙂 Aklıma gelen ilk yapı Office 2007 ve Office 2010 ‘da bir metin seçildiğinde çıkan menü benzeri(tabii çok daha basiti :)) bir yapı oldu. Tabii benim aklıma ilk başta daha basiti Kes-Kopyala-Yapıştır işlemlerini yapan bir ScreenTip benzeri bir yapı oldu. Eğer bunu yapabilirsem daha sonrasında geliştirebilirm.

image 

Gerçekleştirmek istediğim yapı.

Bu akılda çakan şimşekler gibi aklıma gelen ilk yapı içinde 3 tane yan yana butonun bulunduğu bir kullanıcı kontrolü(UserControl) oldu. Bu 3 buton sırası ile Kes-Kopyala-Yapıştır işlemlerini yapacak olan butonlardı. Form üzerinde odaklanılmış(Focus olunmuş) metin kutusunun üstünde görünür hale gelecek ve kullanıcının istediği işlemi yerine getirecekti. Odaklanılmış metin kutusundan başka bir kontrol’e(herhangi bir kontrol) odaklanıldığında bu Kes-Kopyala-Yapıştır işlemini yapan kullanıcı kontrolü(UserControl), metin kutusun üzerinden kaybolacaktı.

Visual Studio 2010 üzerinde hemen bir Windows Application uygulaması açtım ve bir kullanıcı kontrolü(UserControl) oluşturdum. Tabi belirtmem gereken bir nokta var. Kontrolü geliştirirken elimde Telerik RadControls vardı. RadControl’lerini kullandım. Fakat elinizde yoksa standart kontrolleri de kullanabilirsiniz. RadControl’leri kullandığım için benim uygulama biraz daha görsellik açısından zengin gelebilir. Neden benimki buna benzemiyor demeyin. 🙂 Tabii bu arada Telerik firmasına ait RadControllerinin nasıl bişi olduğunu merak edenler için www.telerik.com adresinden kontrolleri inceleyebilirler.

Oluşturduğum hızlı Kes-Kopyala-Yapıştır yapacak olan kullanıcı kontrolü şu şekilde oldu. Sağ tarafta dizayn aşamasındaki görüntü sol tarafta ise kontrollerin hiyerarşisini görebilirsiniz.. 3 buton koyarak sol’dakinin Dock özelliğini “Left”, sağdakinin Dock özelliğini “Right” ve ortadakinin Dock özelliğini “Fill” olarak ayarlamanız. 3 butonun da DisplayStyle özelliğini “Image” olarak ayarlayın ve her birine birer resim ekleyerek ImageAligment özelliğini “MiddleCenter” olarak ayarlayınız. Ben bu ayarları tercih ettim tabii isteğe göre, daha fazla buton ya da butonların resim ile beraber yazı içermeside sağlanabilir.

Quick CutCopyPaste User Control

Hızlı Kes-Kopyala-Yapıştır kullanıcı kontrolü.

Tabii bu kullanıcı kontrolünü(UserControl) kullanacağımız bir Form oluşturdum. Bu form detaylarıda aşağıdadır.

image

Kullanıcı kontrolünün kullanılacağı Form.

Uygulamamız çalıştığında otomatik olarak metin kutularının üzerinde kullanıcı kontrolünün oluşturulmasını sağlayacağız.

image

Hızlı Kes-Kopyala-Yapıştır özelliğinin uygulanmış hali.

Burada birkaç zorluğu belirtmek istiyorum. Oluşturduğumuz kullanıcı kontrolü(UserControl) yukarıdaki form’daki metin kutularının sol üst köşelerinde belirmelidir. Fakat şöyle bir durum söz konusu, kullanıcı kontrolünün(UserControl) dizayn aşamasında sürükle-bırak yöntemi ile oluşmasını istemiyorum. Yani ben sadece metin kutuları ile ilgilenmek istiyorum. Geliştireceğim kod bu işi otomatik yapmalı. Burada karşımıza çıkan sorunlar şunlar;

1) En üstteki metin kutusunun konumu gibi bir durumda üstünde yeterli alan bulunmadığında, kullanıcı kontrolünün(UserControl) metin kutusunun altında belirmesini istiyorum. Bunu kullanıcı kontrolünün(UserControl) “Location” özelliğine uygulayacağım birkaç basit matematik işlemi ile yapabileceğime inanıyorum.

image 

1. maddedeki istenmeyen durum.

2) Kullanıcı kontrolleri uygulama çalışırken(Run-time) aşamasında oluşarak, ilgili metin kutularının üstüne ya da duruma göre altına(1.maddedeki sebepten dolayı) konumlanmalıdır. Bunuda “Location”, “Left”, “Top” özelliklerini kullanarak yapabiliriz. Fakat GroupBox, panel gibi kapsayıcı(Container) kontrollerinin içinde yer alan metin kutularının konum bilgileri(“Location”, ”Left”, ”Top”) kapsayıcı kontrolün başlangıç konumundan itibaren hesaplanmış olduğundan, bir kontrolün ekrandaki konumunu form ‘un sol köşesinden itibaren hesaplayıp veren bir metoda ihtiyacımız vardır. Bu metodu herhangi bir kontrol’de mevcuttur. İsmi, “PointToScreen” dir.

3) Bir durumda metin kutuları için oluşturulan otomatik kullanıcı kontrollerinin(UserControl) görüntülenmesi aşamasında diğer kontrollerin altında kalarak görüntülenememesidir. Bu durumum çözümüde “Form.Controls.SetChildIndex(control, 0);” şeklinde “ChildIndex” değerinin “0” olarak ayarlanmasıdır.

image

3. maddedeki istenmeyen durum.

 

ctrlCutCopyPaste.Designer.cs
namespace WindowsFormApplication1
{
    partial class ctrlCutCopyPaste
    {
        /// <summary>
        /// Required designer variable.
        /// </summary>
        private System.ComponentModel.IContainer components = null;

        /// <summary>
        /// Clean up any resources being used.
        /// </summary>
        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.
        protected override void Dispose(bool disposing) {
            if (disposing && (components != null)) {
                components.Dispose();
            }
            base.Dispose(disposing);
        }

        #region Component Designer generated code

        /// <summary>
        /// Required method for Designer support – do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        private void InitializeComponent() {
            this.rpnlCutCopyPaste = new System.Windows.Forms.Panel();
            this.rcmdCopy = new System.Windows.Forms.Button();
            this.rcmdPaste = new System.Windows.Forms.Button();
            this.rcmdCut = new System.Windows.Forms.Button();
            this.rpnlCutCopyPaste.SuspendLayout();
            this.SuspendLayout();
            //
            // rpnlCutCopyPaste
            //
            this.rpnlCutCopyPaste.Controls.Add(this.rcmdCopy);
            this.rpnlCutCopyPaste.Controls.Add(this.rcmdPaste);
            this.rpnlCutCopyPaste.Controls.Add(this.rcmdCut);
            this.rpnlCutCopyPaste.Dock = System.Windows.Forms.DockStyle.Fill;
            this.rpnlCutCopyPaste.Location = new System.Drawing.Point(0, 0);
            this.rpnlCutCopyPaste.Name = "rpnlCutCopyPaste";
            this.rpnlCutCopyPaste.Size = new System.Drawing.Size(72, 20);
            this.rpnlCutCopyPaste.TabIndex = 0;
            //
            // rcmdCopy
            //
            this.rcmdCopy.Dock = System.Windows.Forms.DockStyle.Fill;
            this.rcmdCopy.Image = global::WindowsFormApplication1.Properties.Resources.editcopy_16;
            this.rcmdCopy.Location = new System.Drawing.Point(24, 0);
            this.rcmdCopy.Name = "rcmdCopy";
            this.rcmdCopy.Size = new System.Drawing.Size(24, 20);
            this.rcmdCopy.TabIndex = 2;
            this.rcmdCopy.Text = "Kopyala / Copy";
            //
            // rcmdPaste
            //
            this.rcmdPaste.Dock = System.Windows.Forms.DockStyle.Right;
            this.rcmdPaste.Image = global::WindowsFormApplication1.Properties.Resources.editpaste_16;
            this.rcmdPaste.Location = new System.Drawing.Point(48, 0);
            this.rcmdPaste.Name = "rcmdPaste";
            this.rcmdPaste.Size = new System.Drawing.Size(24, 20);
            this.rcmdPaste.TabIndex = 1;
            this.rcmdPaste.Text = "Yap??t?r / Paste";
            //
            // rcmdCut
            //
            this.rcmdCut.Dock = System.Windows.Forms.DockStyle.Left;
            this.rcmdCut.Image = global::WindowsFormApplication1.Properties.Resources.editcut_16;
            this.rcmdCut.Location = new System.Drawing.Point(0, 0);
            this.rcmdCut.Name = "rcmdCut";
            this.rcmdCut.Size = new System.Drawing.Size(24, 20);
            this.rcmdCut.TabIndex = 0;
            this.rcmdCut.Text = "Kes / Cut";
            //
            // ctrlCutCopyPaste
            //
            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.Controls.Add(this.rpnlCutCopyPaste);
            this.Name = "ctrlCutCopyPaste";
            this.Size = new System.Drawing.Size(72, 20);
            this.rpnlCutCopyPaste.ResumeLayout(false);
            this.ResumeLayout(false);

        }

        #endregion

        public System.Windows.Forms.Panel rpnlCutCopyPaste;
        public System.Windows.Forms.Button rcmdCopy;
        public System.Windows.Forms.Button rcmdPaste;
        public System.Windows.Forms.Button rcmdCut;
    }
}

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

namespace WindowsFormApplication1
{
    public partial class ctrlCutCopyPaste : UserControl
    {

        #region Events

        public event EventHandler ButtonClicked;

        #endregion

        #region Properties

        public TextBox CurrentTextBox { get; set; }

        #endregion

        #region Constructors

        public ctrlCutCopyPaste(TextBox txtBox) {
            InitializeComponent();

            this.Visible = false;
            this.CurrentTextBox = txtBox;

            this.SetQuickCutCopyPasteControlLocation();

            txtBox.Click += new EventHandler(txtBoxItem_Click);
            txtBox.GotFocus += new EventHandler(txtBoxItem_GotFocus);
            txtBox.LostFocus += new EventHandler(txtBoxItem_LostFocus);

            this.rcmdCut.Click += new EventHandler(rcmdCut_Click);
            this.rcmdCopy.Click += new EventHandler(rcmdCopy_Click);
            this.rcmdPaste.Click += new EventHandler(rcmdPaste_Click);

            // Form boyutu de?i?tirildi?inde quick kontrol g?r?nmez yap?l?r.
            this.CurrentTextBox.FindForm().ResizeBegin += new EventHandler(ctrlCutCopyPaste_ResizeBegin);
        }

        #endregion

        #region Private Methods

        private void SetQuickCutCopyPasteControlLocation() {
            // Kontrol?n ait oldu?u form'u bulur.
            Form controlForm = this.CurrentTextBox.FindForm();

            controlForm.Controls.Add(this);

            // Textbox kontrol?n?n form ?zerindeki konumunu verir.
            Point locationOnForm = controlForm.PointToClient(
                this.CurrentTextBox.Parent.PointToScreen(this.CurrentTextBox.Location));

            // Kes-Kopyala-Yap??t?r kontrol?n?n konumu hesaplan?r.
            int x = locationOnForm.X;
            int y = (locationOnForm.Y – this.Height < 0) ? locationOnForm.Y + this.CurrentTextBox.Height : locationOnForm.Y – this.Height;
            this.Location = new Point(x, y);

            // T?m kontrolleri ?zerinde g?r?nmesi i?in kes-kopyala-yap??t?r kontrol?n?n
            // form ?zerinde ilk alt index olmas? sa?lan?r.
            controlForm.Controls.SetChildIndex(this, 0);
        }

        #endregion

        #region Event Handlers

        protected void RaiseButtonClickedEvent() {
            if (this.ButtonClicked != null)
                this.ButtonClicked(this, null);

            this.CurrentTextBox.FindForm().Focus();

            if (this.CurrentTextBox != null)
                this.CurrentTextBox.Focus();
        }
        protected void ctrlCutCopyPaste_ResizeBegin(object sender, EventArgs e) {
            this.Visible = false;
        }

        protected void rcmdCut_Click(object sender, EventArgs e) {
            if (this.CurrentTextBox != null)
                this.CurrentTextBox.Cut();

            this.RaiseButtonClickedEvent();
        }
        protected void rcmdCopy_Click(object sender, EventArgs e) {
            if (this.CurrentTextBox != null)
                this.CurrentTextBox.Copy();

            this.RaiseButtonClickedEvent();
        }
        protected void rcmdPaste_Click(object sender, EventArgs e) {
            if (this.CurrentTextBox != null)
                this.CurrentTextBox.Paste();

            this.RaiseButtonClickedEvent();
        }
        protected void txtBoxItem_Click(object sender, EventArgs e) {
            // Form boyutu de?i?tirilmi? olabilece?i i?in quick CutCopyPaste kontrol? konumu tekrar hesaplan?r.
            this.SetQuickCutCopyPasteControlLocation();

            this.Visible = true;
        }
        protected void txtBoxItem_GotFocus(object sender, EventArgs e) {
            // Form boyutu de?i?tirilmi? olabilece?i i?in quick CutCopyPaste kontrol? konumu tekrar hesaplan?r.
            this.SetQuickCutCopyPasteControlLocation();

            this.Visible = true;
        }
        protected void txtBoxItem_LostFocus(object sender, EventArgs e) {
            this.Visible = false;
        }

        #endregion

    }
}

 

Form1.Designer.cs
namespace WindowsFormApplication1
{
    partial class Form1
    {
        /// <summary>
        /// Required designer variable.
        /// </summary>
        private System.ComponentModel.IContainer components = null;

        /// <summary>
        /// Clean up any resources being used.
        /// </summary>
        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.
        protected override void Dispose(bool disposing) {
            if (disposing && (components != null)) {
                components.Dispose();
            }
            base.Dispose(disposing);
        }

        #region Windows Form Designer generated code

        /// <summary>
        /// Required method for Designer support – do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        private void InitializeComponent() {
            this.radTextBox1 = new System.Windows.Forms.TextBox();
            this.radTextBox2 = new System.Windows.Forms.TextBox();
            this.radTextBox3 = new System.Windows.Forms.TextBox();
            this.listBox1 = new System.Windows.Forms.ListBox();
            this.panel1 = new System.Windows.Forms.Panel();
            this.groupBox1 = new System.Windows.Forms.GroupBox();
            this.panel1.SuspendLayout();
            this.groupBox1.SuspendLayout();
            this.SuspendLayout();
            //
            // radTextBox1
            //
            this.radTextBox1.AcceptsReturn = true;
            this.radTextBox1.AcceptsTab = true;
            this.radTextBox1.Location = new System.Drawing.Point(38, 15);
            this.radTextBox1.Name = "radTextBox1";
            this.radTextBox1.ReadOnly = true;
            this.radTextBox1.Size = new System.Drawing.Size(100, 20);
            this.radTextBox1.TabIndex = 0;
            this.radTextBox1.Text = "radTextBox1";
            //
            // radTextBox2
            //
            this.radTextBox2.AcceptsReturn = true;
            this.radTextBox2.AcceptsTab = true;
            this.radTextBox2.Location = new System.Drawing.Point(264, 8);
            this.radTextBox2.Name = "radTextBox2";
            this.radTextBox2.Size = new System.Drawing.Size(140, 20);
            this.radTextBox2.TabIndex = 0;
            this.radTextBox2.Text = "radTextBox1";
            //
            // radTextBox3
            //
            this.radTextBox3.AcceptsReturn = true;
            this.radTextBox3.AcceptsTab = true;
            this.radTextBox3.Location = new System.Drawing.Point(167, 12);
            this.radTextBox3.Name = "radTextBox3";
            this.radTextBox3.Size = new System.Drawing.Size(100, 20);
            this.radTextBox3.TabIndex = 0;
            this.radTextBox3.Text = "radTextBox1";
            //
            // listBox1
            //
            this.listBox1.FormattingEnabled = true;
            this.listBox1.Location = new System.Drawing.Point(325, 6);
            this.listBox1.Name = "listBox1";
            this.listBox1.Size = new System.Drawing.Size(97, 290);
            this.listBox1.TabIndex = 1;
            //
            // panel1
            //
            this.panel1.Controls.Add(this.radTextBox2);
            this.panel1.Dock = System.Windows.Forms.DockStyle.Bottom;
            this.panel1.Location = new System.Drawing.Point(0, 209);
            this.panel1.Name = "panel1";
            this.panel1.Size = new System.Drawing.Size(443, 99);
            this.panel1.TabIndex = 3;
            //
            // groupBox1
            //
            this.groupBox1.Controls.Add(this.radTextBox1);
            this.groupBox1.Location = new System.Drawing.Point(67, 88);
            this.groupBox1.Name = "groupBox1";
            this.groupBox1.Size = new System.Drawing.Size(200, 100);
            this.groupBox1.TabIndex = 2;
            this.groupBox1.TabStop = false;
            this.groupBox1.Text = "groupBox1";
            //
            // Form1
            //
            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.ClientSize = new System.Drawing.Size(443, 308);
            this.Controls.Add(this.groupBox1);
            this.Controls.Add(this.panel1);
            this.Controls.Add(this.listBox1);
            this.Controls.Add(this.radTextBox3);
            this.Name = "Form1";
            this.Text = "Form1";
            this.Load += new System.EventHandler(this.Form1_Load_1);
            this.panel1.ResumeLayout(false);
            this.panel1.PerformLayout();
            this.groupBox1.ResumeLayout(false);
            this.groupBox1.PerformLayout();
            this.ResumeLayout(false);
            this.PerformLayout();

        }

        #endregion

        private System.Windows.Forms.TextBox radTextBox1;
        private System.Windows.Forms.TextBox radTextBox2;
        private System.Windows.Forms.TextBox radTextBox3;
        private System.Windows.Forms.ListBox listBox1;
        private System.Windows.Forms.Panel panel1;
        private System.Windows.Forms.GroupBox groupBox1;
    }
}

Form1.cs
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 WindowsFormApplication1
{
    public partial class Form1 : Form
    {
        public Form1() {
            InitializeComponent();
        }

        /// <summary>
        /// Container kontrol?n?n i?erdi?i kontrol listesini verir.
        /// </summary>
        /// <param name="container">Kapsay?c? kontrol.
        /// <param name="list">Kontrol listesi.
        private void AddSubControlsToList(Control container, List<control> list) {
            if (container.Controls != null)
                foreach (Control c in container.Controls) {
                    list.Add(c);
                    AddSubControlsToList(c, list);
                }
        }
        /// <summary>
        /// Container kontrol?n?n i?erdi?i belirtilen tipteki kontrol listesini verir.
        /// </summary>
        /// <param name="container">Kapsay?c? kontrol.
        /// <param name="list">Kontrol listesi.
        /// <param name="type">Elde edilmek istenilen kontrol listesi.
        private void AddSubControlsToList(Control container, List<control> list, Type type) {
            if (container.Controls != null)
                foreach (Control c in container.Controls) {
                    // E?er belirtilen tipte ise..
                    if (c.GetType() == type)
                        list.Add(c);

                    AddSubControlsToList(c, list);
                }
        }
        /// <summary>
        /// Kontrol listesindeki kontrollere Kes-Kopyala-Yap??t?r i?lemini ger?ekle?tirecek olan kontrol? ekler.
        /// </summary>
        /// <param name="controlList">Kontrol Listesi.
        private void SetCutCopyPasteControl(List<control> controlList) {
            foreach (Control ctrl in controlList) {
                TextBox txtBox = ctrl as TextBox;

                if (txtBox != null) {
                    ctrlCutCopyPaste cutCopyPasteControl = new ctrlCutCopyPaste(txtBox);
                }
            }
        }

        private void Form1_Load_1(object sender, EventArgs e) {
            // Kontrol listesini tutacak nesne olu?turulur.
            List<control> controlList = new List<control>();
            // RadTextBox tipindeki kontrollerin listesi elde edilir.
            this.AddSubControlsToList(this, controlList, typeof(TextBox));
            // Kes-Kopyala-Yap??t?r i?lemini ger?ekle?tirecek olan kontrol, kontrol listesindeki
            // kontrollere ba?lan?r.
            this.SetCutCopyPasteControl(controlList);
        }
    }
}

Kodun içinde önemli kısımları açıklama satırları ile açıkladım. Bu kullanıcı kontrolünü(UserControl) kullanarak ve Form1.cs içindeki kodu istediğiniz form’lara yapıştırmanız yeterlidir. Bu sayede form’a eklediğiniz her metin kutusu için kullanıcı kontrolümüz(UserControl) aktifleşecektir. Uygulamamızdan birkaç ekran görüntüsü alalım. 🙂

image 

Yukarıda yeterli alan olmadığında Quick Cut-Copy-Paste kontrolünün görünmesi.

image 

Groupbox kontrolünün altında kalmadan metin kutusu üstünde görüntülenmesi.

image 

3. maddedeki hata görüldüğü gibi artık olmuyor.

Reklamlar

Yazar: K. Murat BAŞEREN, MBA, MCP

I am a senior software developer, MCP, consultant, blogger, former chemist and software trainer. My interests range from software developer to technology. I am also interested in web development, education, and coffee.

3 thoughts on “C# – Quick Cut-Copy-Paste For Textboxes (Hızlı Kes-Kopyala-Yapıştır)

  1. ben basit bi word yapmaya çalışıyorum. kes kopyala yapıştır komutlarına ihtiyacım var haliyle. yazınız çok güzel ama ben bu işte çok iyi değilim tam olarak anlayamadım açıkçası. tam olarak kullandığınız kodlar da görünmüyo. bana yardım ederseniz sevinirim. Kes-Kopyala-Yapıştır komutları nedir?

    Beğen

  2. çok teşekkür ederim çok işime yaradı gerçekten. Elleriniz dert görmesin 🙂

    Beğen

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Google+ fotoğrafı

Google+ hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Connecting to %s