C# Formlar arası bilgi geçişi

Immune

Asistan
Katılım
12 Ocak 2010
Mesajlar
137
Reaksiyon puanı
3
Puanları
0
Ö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.
 
Katılım
31 Aralık 2007
Mesajlar
17,486
Reaksiyon puanı
189
Puanları
243
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 :

public Form2()
{
InitializeComponent();
}
Olarak gelen methodunu:
public Form2(string deneme)
{
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...
 

Immune

Asistan
Katılım
12 Ocak 2010
Mesajlar
137
Reaksiyon puanı
3
Puanları
0
Fakat bu sefer de şu satırda şöyle bir hata alıyorum.

ifc42c.jpg
 
Katılım
31 Aralık 2007
Mesajlar
17,486
Reaksiyon puanı
189
Puanları
243
Form2'yi yaratırken verini girmemişsin ama :) Böyle hata alman normal :)

Az önceki örneğe bakaraktan şöyle yaratman gerekirdi formu:

Form2 frm = new Form2("string verim");
frm.Show();

Form2'de string istiyosun ama yaratırken veriyi vermiyosan onu yaratamazsın...

Hata alman da ondan kaynaklanıyor.

Neyi istiyorsan yaratırken vermen gerekir. String ise string, int ise int, float ise float...
 

Immune

Asistan
Katılım
12 Ocak 2010
Mesajlar
137
Reaksiyon puanı
3
Puanları
0
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.
 
Katılım
31 Aralık 2007
Mesajlar
17,486
Reaksiyon puanı
189
Puanları
243
listeye çevirip de gönderebilirsin verilerini istersen. Göndermek istediğin veri tipi nedir? Ona göre bir örnek vereyim sana.
 

Immune

Asistan
Katılım
12 Ocak 2010
Mesajlar
137
Reaksiyon puanı
3
Puanları
0
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.
 
Katılım
31 Aralık 2007
Mesajlar
17,486
Reaksiyon puanı
189
Puanları
243
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:

public Form2(int[] deneme)
{
InitializeComponent();
verilerim = deneme;
}

public int[] verilerim {get; set;}

Daha sonra ilk formdan da verilerimizi formu yaratırken gönderiyoruz :

int[] sayilar = {0,1,2,3,4}; //ne olması gerekiyorsa

Form2 fmr = new Form2(sayilar);
fmr.Show();

Bu adımdan sonra form2 üzerinden verileri tanımladığımız verilerim property'si üzerinden okuyabilirsin...

Not : Veri atanmamış bir array gönderemezsin.
 

avarhan

Öğrenci
Katılım
22 Ekim 2010
Mesajlar
23
Reaksiyon puanı
0
Puanları
0
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();
}
 

Immune

Asistan
Katılım
12 Ocak 2010
Mesajlar
137
Reaksiyon puanı
3
Puanları
0
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();
}

Aynen ben de daha sonra böyle yaptım. :) Teşekkürler.
 
Üst