C# Formlar Arası Nesne Kontrolü (Gerçek Zamanlı)

Bu konuyu okuyanlar

emretanriverdi

Asistan
Katılım
15 Mart 2013
Mesajlar
225
Reaksiyon puanı
0
Puanları
16
Selamün Aleyküm arkadaşlar,

Ben bi proje üzerinde çalışıyorum. projemde bir sıkıntı var ve halledemedim.
Sıkıntı şu, 2 tane form var. form1de birtane picturebox var. form2 yi açıp (form1 hala açık) form2den, form1deki picturebox ın resmini butona tıklayarak değiştirmek istiyorum.

internetten biraz araştırdım, "formlar" adında class tanımlamışlar içine "public Form1 form1=new Form1();" şeklinde iki formuda tanımlamışlar.Form2 deki "formlar.form1.picturebox.image=resim;" yazıyorum çalışıyor fakat yeni form1 oluşturuyo.açık olan formdaki resim değişmiyor. form1.show yazınca başka form açılıyo orda değişiyor.

Sorunu nasıl çözebilirim?
 

annttiigs

Müdavim
Emektar
Katılım
7 Şubat 2007
Mesajlar
2,589
Reaksiyon puanı
24
Puanları
38
biraz object oriented olsun dersen event Listener ile yaparsın. böylece bu event listeneri geliştirir daha da güzel hale getirirsin ileriki projelerinde ve ihtiyaçlrında. en kolay yöntemi ise form1'e bir tane changeImage metodu yazarsın.

c# syntax'ı bilmiyorum ama şöyle bir şey olurdu herhalde;

public void changeImage (Image img); bunun içine fotoğrafı değiştirme işlemini yazarsın.

böylece form2'de button'a tıklandığında form1.changeImage(resim); dersin ve o da değişir. eyyorlamam bu gadder.


not : form2'yi oluştururken form1'i ona referans olarak vermeyi unutma. yoksa yine yeni formlar oluşturabilirsin.
 

is_oz

Öğrenci
Katılım
20 Mart 2009
Mesajlar
15
Reaksiyon puanı
3
Puanları
0
yazdığın kodu buraya yazarsan yardımcı olmaya çalışayım.
 

emretanriverdi

Asistan
Katılım
15 Mart 2013
Mesajlar
225
Reaksiyon puanı
0
Puanları
16
yazdığın kodu buraya yazarsan yardımcı olmaya çalışayım.
kardeş ben yukarda olayı basitleştirerek anlattım ,yukardakini yapsam gerisini yaparım diye. sana olayı şöyle açıklıyayım: form1 de bi resim açıyorum pictureboxa yerleştiriyorum. sonra butona bastığım zaman bu resmin üstüne logo ekliyorum. ama bitane logo olmadığından form2 den logoyu değiştirebiliyorum. olay burda başlıyo :) form2 açılıyo ben logoyu seçiyorum sonra form1 dönüp butona basınca seçtiğim logoyu ekliyo. ama istedğim bu değil logoyu seçtiği anda form1deki pictureboxa eklesin istiyorum. (form2 den seçtiktensonra form1 e dönüp butonla yapmaktansa, form2den seçer seçmez eklesin)

- - - Mesaj Güncellendi - - -

biraz object oriented olsun dersen event Listener ile yaparsın. böylece bu event listeneri geliştirir daha da güzel hale getirirsin ileriki projelerinde ve ihtiyaçlrında. en kolay yöntemi ise form1'e bir tane changeImage metodu yazarsın.

c# syntax'ı bilmiyorum ama şöyle bir şey olurdu herhalde;

public void changeImage (Image img); bunun içine fotoğrafı değiştirme işlemini yazarsın.

böylece form2'de button'a tıklandığında form1.changeImage(resim); dersin ve o da değişir. eyyorlamam bu gadder.


not : form2'yi oluştururken form1'i ona referans olarak vermeyi unutma. yoksa yine yeni formlar oluşturabilirsin.

kardeş ilk dediğini anlanmadım.
ikinci dediğini ise önceden yapmıştım. public void yazdığımda form2den fonksiyon görünmüyor. public static void yazınca görünüyor ama zamanda fonksiyon statik olduğu için picturebox ı görmüyor fonksiyon içinde(picturebox statik olmadığı için).

okuduğum bi bilgiye göre staticler sadece staticlere erişebilirmiş. denedim doğruymuş :D
 

annttiigs

Müdavim
Emektar
Katılım
7 Şubat 2007
Mesajlar
2,589
Reaksiyon puanı
24
Puanları
38
bence sen kodunu yaz. form 2 içinde;

Form1.changeImage dersen evet static metod kullanman gerekir. Benim sana önerdiğim yöntem ise;

form2 içinde;

constructor çağırılırken (Form2 nesnesi oluştururken)

new Form2(this); //Form2 penceresini form1 içinde oluşturduğunu varsayıyorum. dolayısı ile this sana Form1'i verecek. Daha fazla zorlamadan şöyle anlatayım;


public class Form2
{
private Form1 f1;
public Taxi(Form1 form1)
{
this.f1 = form1;
}
public void changeForm1Image (Image img){
this.f1.changeImage(img);
}
}


bunun gibi bir şey. bütün işlemini static bir method olan main'de yapmaya çalışırsan buna asla ulaşamazsın.
 

sonercelix

Asistan
Katılım
13 Şubat 2009
Mesajlar
149
Reaksiyon puanı
0
Puanları
16
Form1 den form2 yi açarken Form2e referans gönder.

Form2 frm2=new Form2(Picturebox pictureBox); şeklinde. Form2 ye de yeni bir constructer ekle. Parametresi Picturebox olsun. Daha sonra form2 nin istenilen olayında bu parametre ile gelen picturebox nesnesinin imajını değiştir.
 

annttiigs

Müdavim
Emektar
Katılım
7 Şubat 2007
Mesajlar
2,589
Reaksiyon puanı
24
Puanları
38
peki bir tane daha picture box koyarsa ? onun da mi referansını gönderecek ? yapmayın arkadaşlar bu programcı çözümü değil.

referans olarak form1'i yolla. ve onun public metodları ile işini hallet. Hatta şuraya kodunu koy da iki dakikada çözelim. bu kadar zor bir olay değil bu.
 

hokumus

Asistan
Katılım
15 Mayıs 2012
Mesajlar
173
Reaksiyon puanı
3
Puanları
18
Selamlar,

Form1 ve Form2 örneğinden gidersek, 1. formdan 2. formu açtın. Ve 2. formdan bir butona tıkladığında 1. formda bulunan herhangi bir nesnenin bir özelliğini setlemek istiyorsun. Ve bunu 2 formda açıkken yapmak istiyorsun. Aşağıdaki örnek senin soruna göre hazırlanmış. İlgili alanları revize ederek diğer nesneler üzerinde de benzer mantığı kullanabilirsin.

Aşağıdaki kodu 2. formda çalıştıracaksın.

Kod:
            Form1 form = Application.OpenForms["Form1"] as Form1;
            PictureBox pbox = form.Controls["pictureBox1"] as PictureBox;
            pbox.Image = Image.FromFile("C:\\test.jpg");


Başarılar.
 

emretanriverdi

Asistan
Katılım
15 Mart 2013
Mesajlar
225
Reaksiyon puanı
0
Puanları
16
Form1 den form2 yi açarken Form2e referans gönder.

Form2 frm2=new Form2(Picturebox pictureBox); şeklinde. Form2 ye de yeni bir constructer ekle. Parametresi Picturebox olsun. Daha sonra form2 nin istenilen olayında bu parametre ile gelen picturebox nesnesinin imajını değiştir.
peki bir tane daha picture box koyarsa ? onun da mi referansını gönderecek ? yapmayın arkadaşlar bu programcı çözümü değil.

referans olarak form1'i yolla. ve onun public metodları ile işini hallet. Hatta şuraya kodunu koy da iki dakikada çözelim. bu kadar zor bir olay değil bu.

Selamlar,

Form1 ve Form2 örneğinden gidersek, 1. formdan 2. formu açtın. Ve 2. formdan bir butona tıkladığında 1. formda bulunan herhangi bir nesnenin bir özelliğini setlemek istiyorsun. Ve bunu 2 formda açıkken yapmak istiyorsun. Aşağıdaki örnek senin soruna göre hazırlanmış. İlgili alanları revize ederek diğer nesneler üzerinde de benzer mantığı kullanabilirsin.

Aşağıdaki kodu 2. formda çalıştıracaksın.

Kod:
            Form1 form = Application.OpenForms["Form1"] as Form1;
            PictureBox pbox = form.Controls["pictureBox1"] as PictureBox;
            pbox.Image = Image.FromFile("C:\\test.jpg");


Başarılar.

Hepinize çok teşekkür ederim sorunu çözdüm :)
 

yakuppdurmus

Öğrenci
Katılım
1 Mayıs 2016
Mesajlar
1
Reaksiyon puanı
0
Puanları
1
Yaş
27
Hocam bugün bende tam bunu arıyordum taa 2012 de cevabı yazılmış fakat bir kaç ekleme yapmak için kayıt oldum benim gibi başka arayanlar olursa fazla aramadan cevabı bulsunlar.

hokomus hocamın dediği gibi


Form1 form = Application.OpenForms["Form1"] as Form1;
PictureBox pbox = form.Controls["pictureBox1"] as PictureBox;
pbox.Image = Image.FromFile("C:\\test.jpg");

Bu şekilde oluyor fakat eğer bi nesne bir panelin bir grup kutusunun içerisinde ise önce o grup nesnesini türetip sonra grup nesnesinin içerisindeki nesnelere erişiyormuşuz :)

Mesela


Form1 form = Application.OpenForms["Form1"] as Form1;
GroupBox grupbox = form.Controls["groupBox1"] as GroupBox;
Button btn1 = grupbox.Controls["button1"] as Button;
btn1.Enabled = false;


bu şekilde 1. formda ki grup kutusu nesnesinin içerisindeki butona erişmiş olduk Teşekkürler hokomus hocam :)
 
Üst