C# Windows forms kod ile oluşturulan kontrol ile etkileşime girilmiyor

Halileo Halilei

Hectopat
Katılım
10 Nisan 2020
Mesajlar
129
Çözümler
1
Daha fazla  
Cinsiyet
Erkek
Kodlardaki asıl amacım buton ile küp şeklinde bir label oluşturmak ve timer ile de onları yavaş yavaş aşağıya indirip bir animasyon yapmaktı. Fakat kod ile oluşturduğum kontroller ile etkileşime giremiyorum. Bunun bir çözümü var mı?
 

Dosya Ekleri

  • Ekran görüntüsü 2022-05-05 000740.png
    Ekran görüntüsü 2022-05-05 000740.png
    43,8 KB · Görüntüleme: 29
  • Ekran görüntüsü 2022-05-05 000852.png
    Ekran görüntüsü 2022-05-05 000852.png
    2,8 KB · Görüntüleme: 32
Kodlardaki asıl amacım buton ile küp şeklinde bir label oluşturmak ve timer ile de onları yavaş yavaş aşağıya indirip bir animasyon yapmaktı. Fakat kod ile oluşturduğum kontroller ile etkileşime giremiyorum. Bunun bir çözümü var mı?
Kontrolü bir fonksiyon içinde oluşturmuşsun. Diğer fonksiyonlardan erişmek istiyorsan fonksiyon dışında,
public olarak oluşturman gerek.
 
Kontrolü bir fonksiyon içinde oluşturmuşsun. Diğer fonksiyonlardan erişmek istiyorsan fonksiyon dışında,
public olarak oluşturman gerek.
Tam olarak ne demek istediğinizi anlamadım. Böyle bir şey yaptım fakat hala label'a erişemiyorum.
 

Dosya Ekleri

  • Ekran görüntüsü 2022-05-05 002441.png
    Ekran görüntüsü 2022-05-05 002441.png
    41,8 KB · Görüntüleme: 27
Kodlardaki asıl amacım buton ile küp şeklinde bir label oluşturmak ve timer ile de onları yavaş yavaş aşağıya indirip bir animasyon yapmaktı. Fakat kod ile oluşturduğum kontroller ile etkileşime giremiyorum. Bunun bir çözümü var mı?
Timerin click özelliğini kullanmayı dene.
Kodlardaki asıl amacım buton ile küp şeklinde bir label oluşturmak ve timer ile de onları yavaş yavaş aşağıya indirip bir animasyon yapmaktı. Fakat kod ile oluşturduğum kontroller ile etkileşime giremiyorum. Bunun bir çözümü var mı?

Bir de labeli nesne olarak tanımlamadan dene. Yani label New lbl değil de formun içerisine bir label koy ve o labele isim ver lbl. Top+=1; kısmına onu yaz.
Kodlardaki asıl amacım buton ile küp şeklinde bir label oluşturmak ve timer ile de onları yavaş yavaş aşağıya indirip bir animasyon yapmaktı. Fakat kod ile oluşturduğum kontroller ile etkileşime giremiyorum. Bunun bir çözümü var mı?

O kodların hepsini bir metot haline getir ve daha sonra metodu butonun içine çağır, metot public olması gerekiyor, yoksa buton görmeyecek.
 
Label Global Scope değil Function Scope'da olduğu için erişemiyorsunuz. Label'ı Global Scope'da tanımlayın, sonradan değer atayın.

Kod:
public Label MyLabel { get; set; }

private void MyMethod(){
   //MyLabel, accesible now.
   MyLabel = new Label();
}

Eğer farklı classlardan erişilmemesi gereken bir özellik ise erişim seviyesini "public" değil "private" yapın.

Eğer farklı classlardan erişilebilir fakat salt-okunur olması gerekiyorsa setter fonksiyonunu iptal edin ya da custom setter fonksiyonunuzu yazın.
 
C#:
Label lbl = new Label();
kodunu fonksiyonun üstüne koyup başına static getirin.
Teşekkür ederim oldu. Fakat şu an sadece bir label oluşturabiliyorum. Butona defalarca bassam da ekranımda sadece bir label oluyor. Sadece ekranımdaki label'ın konumu değişiyor. Ben butonu spawner gibi kullanmak istiyorum onu nasıl yapabilirim?
 
Problem, function scope'da tanımladığınız label'a olan referansınızı kaybetmeniz. Bunu çözmek için List'den faydalanabilirsiniz.

Örnek:
Kod:
namespace TechnopatDemo
{
    public partial class Main : Form
    {
        public List<Label> Labels { get; set; }
        public Main()
        {
            InitializeComponent();
            Labels = new List<Label>() { };
        }

        private void Main_Load(object sender, EventArgs e)
        {

        }

        private void addButton_Click(object sender, EventArgs e)
        {
            Label label = new Label();
           //label özelliklerini ayarlayın.
            Labels.Add(label);
            this.Controls.Add(label);
        }

        private void EditLabel(int labelNum)
        {
            //Şimdi List'ten ref alalım.
            var label = Labels[labelNum];
            //Label özellikleri tekrar ayarlanabilir
        }
    }
}
 

Geri
Yukarı