Dinamik kontrol oluşturma ve sürükle bırak

Dinamik oluşturulan kontrolü çalışma zamanında kontrol etmek de diyebiliriz. Masaüstü form uygulamalarımızda bazen kullanıcılarımızdan çalışma anında kontrol oluşturmasını isteye bilir, bu oluşturulan dinamik kontrolü sürükle bırak yöntemi ile istediği yere konumlandırmak isteye biliriz. Hata oluşturduğu bu kontrolün özelliklerini(text, name) kullandırabiliriz.

dinamik-kontrol-surukle-birak

Şekildeki gibi bir form ekranı hazırladıktan sonra olayı ele alalım.(Beyaz panel içindeki butonları oluşturmayın!) Burada yapılan işlem şu şekilde cereyan etmekte; sol taraftaki butonu panel içine sürükleyip bırakıyoruz. Bırakıldıktan sonra panel içine yeni bir buton oluşturuluyor. Çalışma anında oluşturulan bu butonu panel içinde istediğimiz yere konumlandırabilir, tıkladığımızda butonun özelliklerini alabiliriz. Mevzumuz bu dostlar…

Kod kısmına geçmeden önce şimdiden söyleyeyim, kod kısmı biraz karışık gözükebilir. Örneği metotları ile birlikte teker teker yazdığınızda mevzunun o kadar zor olmadığını anlayacaksınız. Butonun; MouseDown, MouseLeave, MouseMove özelliklerine gelerek butona sürükle bırak özelliği veriyoruz. Çalışma zamanında oluşturulacak buton için gerekli metotları ekliyoruz.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
bool tasimaBasladi;
        int x;
        int y;
        protected void dinamikMetod(object sender, EventArgs e)
        {
            Button dinamikButon = (sender as Button);
            MessageBox.Show("Tıkdığın buton adı " + dinamikButon.Text);

        }
        protected void dinamikBasla(object sender, MouseEventArgs e)
        {
            tasimaBasladi = true;
        }
        protected void dinamikDur(object sender, EventArgs e)
        {
            tasimaBasladi = false;
        }
        protected void dinamikTasi(object sender, MouseEventArgs e)
        {
            Button dinamikButon = (sender as Button);
            if (tasimaBasladi == true && e.Button == MouseButtons.Left)
            {
                dinamikButon.Left += e.X - dinamikButon.Width / 2;
                dinamikButon.Top += e.Y - dinamikButon.Height / 2;
            }

            lblx.Text = Convert.ToString(dinamikButon.Location.X);
            lbly.Text = Convert.ToString(dinamikButon.Location.Y);
        }


        private void btnTasinan_MouseDown(object sender, MouseEventArgs e)
        {
            tasimaBasladi = true;
        }

        private void btnTasinan_MouseLeave(object sender, EventArgs e)
        {
            tasimaBasladi = false;
            int i = 0;
            foreach (Control ktn in panel1.Controls)
            {
                if (ktn is Button)
                {
                    i = i + 1;
                }
            }

            Button btn = new Button();
            btn.Name = i.ToString();

            btn.AutoSize = false;

            btn.Size = new Size(80, 30);
            btn.Text = "Buton " + i.ToString();
            btn.Font = new Font(btn.Font.FontFamily.Name, 8);
            btn.Location = new Point(x, y);
            panel1.Controls.Add(btn);
            btnTasinan.Location = new Point(x: 12, y: 125);
            btn.Click += new EventHandler(dinamikMetod);

            btn.MouseDown += new MouseEventHandler(dinamikBasla);

            btn.MouseLeave += new EventHandler(dinamikDur);

            btn.MouseMove += new MouseEventHandler(dinamikTasi);


        }

        private void btnTasinan_MouseMove(object sender, MouseEventArgs e)
        {
            if (tasimaBasladi == true && e.Button == MouseButtons.Left)
            {
                btnTasinan.Left += e.X - btnTasinan.Width / 2;
                btnTasinan.Top += e.Y - btnTasinan.Height / 2;
            }
            lblx.Text = Convert.ToString(btnTasinan.Location.X);
            lbly.Text = Convert.ToString(btnTasinan.Location.Y);

            x = btnTasinan.Location.X;
            y = btnTasinan.Location.Y;
        }

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir