Öncelikle merhaba. Benzer konular var mıydı tam bakamadım ancak biraz aciliyeti var durumun. Windows Form uygulamaları üzerine bir ödevim var. 2 farklı form üzerinde çalışıyorum ve 1. formda bir butona tıklandığında 2. form açılacak. Buraya kadar tamam fakat 2. form üzerinde bulunan listbox'a 1. formda tanımladığım dizinin içerisindeki değerleri aktarmam gerekiyor. Burada tıkanıyorum. Bu konuda bilgisi olanlardan yardım bekliyorum. Şimdiden teşekkürler.
C# Formlar arası bilgi geçişi
Cevaplar
Aktaracağınız verinin string olduğunu düşünerekten (siz iztediğinizi aktarabilirsiniz) şöyle bir cevap verebilirim. Formun initializion methoduna bir requirement koyarak sorunu aşarsınız. Yani form 2 nin :
Olarak gelen methodunu:public Form2()
{
InitializeComponent();
}
Olarak düzenlerseniz form classını yaratırken forma bir deneme'ye atanmak üzere bir string atamak zorunda kalırsınız ve form açılırken o veri form 2'ye gönderilmiş olur. Daha sonra o veriyi form2 class'ı içince bir public property'e göndererek istediğiniz gibi kullanabilirsiniz...public Form2(string deneme)
{
InitializeComponent();
}
Fakat bu sefer de şu satırda şöyle bir hata alıyorum.


Form2'yi yaratırken verini girmemişsin ama :) Böyle hata alman normal :)
Az önceki örneğe bakaraktan şöyle yaratman gerekirdi formu:
Hata alman da ondan kaynaklanıyor.
Neyi istiyorsan yaratırken vermen gerekir. String ise string, int ise int, float ise float...
Az önceki örneğe bakaraktan şöyle yaratman gerekirdi formu:
Form2'de string istiyosun ama yaratırken veriyi vermiyosan onu yaratamazsın...Form2 frm = new Form2("string verim");
frm.Show();
Hata alman da ondan kaynaklanıyor.
Neyi istiyorsan yaratırken vermen gerekir. String ise string, int ise int, float ise float...
Anladım fakat pek iyi değilim bu konuda :). Form 2'yi yaratırken diziyi veremiyorum mesela. Yani int[] A şeklinde bir dizi tanımlamışım ve parantez içine bunu böyle yazdığımda hata alıyorum. Sadece (A) şeklinde yazınca hata vermiyor ama tabi böyle olunca da Form 2'de A dizisini göremiyorum. listBox1.Icons.Add() fonksiyonuyla A dizisinin tüm elemanlarını yazmam gerekiyor.
listeye çevirip de gönderebilirsin verilerini istersen. Göndermek istediğin veri tipi nedir? Ona göre bir örnek vereyim sana.
Ya durum aslında şu: Bir sayının çarpanlarını bulup bunları 2. açılan formun listbox'ında görüntülemek amaç. Ben de bunları diziye atayarak daha iyi yaparım diye düşündüm. Daha basit bir yöntemi varsa o da olabilir ancak bu şekilde olursa kodu da baştan değiştirmem gerekmez.
int tipinde bir array veri de gönderebilirsin bir sıkıntı yaratmaz. şöyle ki;
Form2 de requirement olarak arrayimizi tanımlıyoruz ve bir public property'e verileri gönderiyoruz:
Not : Veri atanmamış bir array gönderemezsin.
Form2 de requirement olarak arrayimizi tanımlıyoruz ve bir public property'e verileri gönderiyoruz:
Daha sonra ilk formdan da verilerimizi formu yaratırken gönderiyoruz :public Form2(int[] deneme)
{
InitializeComponent();
verilerim = deneme;
}
public int[] verilerim {get; set;}
Bu adımdan sonra form2 üzerinden verileri tanımladığımız verilerim property'si üzerinden okuyabilirsin...int[] sayilar = {0,1,2,3,4}; //ne olması gerekiyorsa
Form2 fmr = new Form2(sayilar);
fmr.Show();
Not : Veri atanmamış bir array gönderemezsin.
Peki çok teşekkürler.
İnşallah yardımcı olabilmişimdir :)
Doğru anladıysam böylede çözebilirsin. form2'de listbox ekleyerek modifiers özelliğini public yap. Bununla uygulamada tüm formlardan listboxsa erişebilirsin. Sonrad da fom1'den diziyi FORM2' deki listboxsa ekleyebilirsin.
form1de çalışacak kodlar.
private void button3_Click(object sender, EventArgs e)
{
string [] sayilar = { "ali","veli","ahmet", "mehmet","ayşa" };
Form2 f = new Form2();
for (int i = 0; i < 5; i++)
{
f.listBox1.Items.Add("isim " + sayilar);
}
f.Show();
}
form1de çalışacak kodlar.
private void button3_Click(object sender, EventArgs e)
{
string [] sayilar = { "ali","veli","ahmet", "mehmet","ayşa" };
Form2 f = new Form2();
for (int i = 0; i < 5; i++)
{
f.listBox1.Items.Add("isim " + sayilar);
}
f.Show();
}
Aynen ben de daha sonra böyle yaptım. :) Teşekkürler.avarhan dedi: ↑Doğru anladıysam böylede çözebilirsin. form2'de listbox ekleyerek modifiers özelliğini public yap. Bununla uygulamada tüm formlardan listboxsa erişebilirsin. Sonrad da fom1'den diziyi FORM2' deki listboxsa ekleyebilirsin.
form1de çalışacak kodlar.
private void button3_Click(object sender, EventArgs e)
{
string [] sayilar = { "ali","veli","ahmet", "mehmet","ayşa" };
Form2 f = new Form2();
for (int i = 0; i < 5; i++)
{
f.listBox1.Items.Add("isim " + sayilar);
}
f.Show();
}