Form Label kaydırma

Bu konuyu okuyanlar

I-TECH-INN

Öğrenci
Katılım
6 Kasım 2009
Mesajlar
4
Reaksiyon puanı
0
Puanları
0
Arkadaşlar kolay gelsin;

Bir kod oluşturmaya çalışıyorum da,

Şimdi olayı size şöyle özetliyim;

yukarı aşağı sağa ve sola hareket eden bir label yapmaya çalışıyorum ( ne işe yarar diye sormayın, bende bilmiyorum hoca istedi işte :D)

Sağa sola hareket işi tamam da, aynı mantıkta yukarı aşağı hareket ettiremiyorum
label2.Top = 1; yazdığımda sorun yok ancak
label2.Bottom = 0 yazdığımda "read only" vss gibi hata alıyorum.

Formun altına geldiğinde kısmını belirtmek için, bottom'dan başka bir metod var mı? Yoksa nasıl bu Bottom'a "0" değeri verebilirim?

Kod:
        public Form1()
        {
            InitializeComponent();
        }

        int sagKaymaHizi = 1;//hızını ayarlayabilirsin
        int yukariKaymaHizi = 10;

        private void Form1_Load(object sender, EventArgs e)
        {
            //kayan label yapmak için iki adet Label nesnesi kullanılacak
            label1.Location = label2.Location;//iki etiket aynı konumdalar

            label1.Text = "Kayıyoruuum!!!!!";
            label2.Text = "Kayıyoruuum!!!!!";

            //Biz burda kayan bir label varmış gibi göreceğimizden 
            // iki label ada aynı texti yazdırıyoruz
            kayanYaziyiBaslat();
        }
        private void kayanYaziyiBaslat()
        {
            //birici label  forma girerken
            label1.Left = 0;
            label1.Top = 100;
           
            //ikinci label formdan çıkacak
            label2.Left = this.Width;
            label2.Top = this.Height;
            //kayan label ın hızını buradan ayarlayabilirsiniz
            timer1.Interval = 100;
            //Kayan Label olayını başlatma
            timer1.Start();
        }
        private void timer1_Tick(object sender, EventArgs e)
        {
            //her olay olduğunse label latı sağa sagKaymaHizi
            // kadar sağ kaydır
            label1.Left += sagKaymaHizi;
            label2.Left += sagKaymaHizi;
            label1.Top += yukariKaymaHizi;
            label2.Top += yukariKaymaHizi;
            //eğer label1  formun sağ tarafından çıkıyorsa label2 forma 
            // sol taraftan giriş yapsın
            if (label1.Right >= this.Width && label1.Right < this.Width + sagKaymaHizi)
                label2.Left = 0 - label2.Width;


            //eğer label2  formun sağ tarafından çıkıyorsa label1 forma 
            // sol taraftan giriş yapsın
            if (label2.Right >= this.Width && label2.Right < this.Width + sagKaymaHizi)
                label1.Left = 0 - label1.Width;

            if (label1.Top >= this.Height && label1.Top < this.Height + yukariKaymaHizi)
                label2.Bottom= 0 - label2.Height;

            if (label2.Top >= this.Height && label2.Top < this.Height + yukariKaymaHizi)
                label1.Bottom= 0 - label1.Height;
        }

Bu şekilde label1.Bottom bana "Read Only" hatası vermekte. label1.Bottom yerine Top yazdığımda da doğal olarak Label aşağı indikten sonra, bir daha yukarıdan gelmemekte :)

Yardımlarınızı beklemekteyim :)
 

N3CAT1

Dekan
Emektar
Katılım
20 Nisan 2008
Mesajlar
6,609
Reaksiyon puanı
144
Puanları
63
Şu şekilde kullanırsan düzelecektir sanırım:

PHP:
label1.Top -= yukariKaymaHizi;
label2.Top -= yukariKaymaHizi;
 

I-TECH-INN

Öğrenci
Katılım
6 Kasım 2009
Mesajlar
4
Reaksiyon puanı
0
Puanları
0
Bu seferde yukarı çıktıktan sonra kayboluyor :)

Kanımca Form'da sağ sol işlemindeki Left - Right karşılıklarını verdiğimiz gibi, Top - Bottom karşılıklarını da vermemiz gerekiyor.
 

anhedonist

Öğrenci
Katılım
29 Ekim 2011
Mesajlar
2
Reaksiyon puanı
0
Puanları
0
Sağa kaydırmak için Left özelliğini arttır, sola kaydırmak için azalt. Aynı şekilde yukarı için top özelliğini azalt aşağı hareket ettirmek için arttır.
 

t(>_<t)

Öğrenci
Katılım
3 Ekim 2009
Mesajlar
44
Reaksiyon puanı
3
Puanları
0
Pencere boyutunuz 600,600 olsun mesela;
Labelda 10,10 'dan 590,10'a kaysın diyelim;

int oldX = Label1.Left;
Label1.Left = (oldX+1) % 590;

Şeklinde denrseniz, 10 iken 11, 11 iken 12, 200 ken 201, 580 ken 581, 589 iken 1 olur. Böylelikle sürekli bir aynı koordinatlarda dolaşabilirsiniz. Aynı yapıyı y ekseni içinde kurabilirsiniz diye düşünüyorum.
 

I-TECH-INN

Öğrenci
Katılım
6 Kasım 2009
Mesajlar
4
Reaksiyon puanı
0
Puanları
0
Pencere boyutunuz 600,600 olsun mesela;
Labelda 10,10 'dan 590,10'a kaysın diyelim;

int oldX = Label1.Left;
Label1.Left = (oldX+1) % 590;

Şeklinde denrseniz, 10 iken 11, 11 iken 12, 200 ken 201, 580 ken 581, 589 iken 1 olur. Böylelikle sürekli bir aynı koordinatlarda dolaşabilirsiniz. Aynı yapıyı y ekseni içinde kurabilirsiniz diye düşünüyorum.

Üstad teşekkür ederim, O kadar satırlık kod heba oldu ve yerine aşağıdaki kodlar geldi :))

Kod:
 private void Form1_Load(object sender, EventArgs e)
        {
            label1.Text = "Yatay";
            label2.Text = "Dikey";
            kayanYaziyiBaslat();
        }
        private void kayanYaziyiBaslat()
        {

            label1.Left = 0;
            label1.Top = 0;
            label2.Left = 0;
            label2.Top = 0;
            timer1.Interval = 1;
            timer1.Start();
        }
        private void timer1_Tick(object sender, EventArgs e)
        {
            label1.Left = (label1.Left + 1) % 590;
            label2.Top = (label2.Top + 1) % 590;
        }

Yardımcı olan herkesin eline sağlık, iyi geceler dilerim cümleten
 
Üst