İçeriğe geç
ShiftDelete.Net
Haber ara/ SDN'ye SorGiriş
Haber Akışı SDNTV İnceleme Forum Yapay Zeka Akıllı Telefon Elektrikli Otomobil Oyun ShiftDelete.Net Global Teknoloji Haberleri Mobil Otomobil Donanım Savunma Bilim Sosyal Medya İnternet Giyilebilir Teknoloji Rehber Ürünler Son dakika Yazarlar
  1. Ana sayfa
  2. Topluluk
  3. Programlama
  4. Programlama Dilleri
Programlama Dilleri

Form Label kaydırma

I-TECH-INN11.11.20115 cevap6.150 görüntüleme
2009'den beri4 mesaj
#1
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?
        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 :)
Cevaplar
2008'den beri6.607 mesaj
#2
Şu şekilde kullanırsan düzelecektir sanırım:

label1.Top -= yukariKaymaHizi;
label2.Top -= yukariKaymaHizi;
I-TECH-INN Konuyu açan
2009'den beri4 mesaj
#3
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.
2011'den beri2 mesaj
#4
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.
2009'den beri44 mesaj
#5
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 Konuyu açan
2009'den beri4 mesaj
#6
t(>_<t) dedi: ↑
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 :))
 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

Cevabını yaz

Cevap yazmak için giriş yap ya da üye ol. Eski forum kullanıcı adın ve parolanla girebilirsin.