C# Global Değişken Ve Datagridview ( Yardım )
-
Form2 deki datagridviewdeki veriye tıklandığında form1deki textboxa nasıl yazdırabilirim ?
public static void ilaclar()
{
textBox5.DataBindings.Clear();
textBox5.DataBindings.Add("text", Form2.bs_ilac, "İlac Adı");
}
voidi böyle tanımlıyorum
form2deki datagridin clickinde
private void dataGridView2_Click(object sender, EventArgs e)
{
Form1.ilaclar();
}
böyle çağırıyorum ama hata veriyor ilaclar voidinde.Sanırım textbox5 global değil diyor. Verdiği hata :
Error1An object reference is required for the non-static field, method, or property 'Ödev1___Hasta_ilaç_kayıt__.Form1.textBox5'C:\Users\Koray\Desktop\Ödev1 ( Hasta ilaç kayıt )\Form1.cs5313Ödev1 ( Hasta ilaç kayıt )
NE YAPMAM GEREKİYOR YARDIMCI OLURMUSUNUZ :D TEŞEKKÜRLER.
-
Müritler bilen yok mu ne yapacağımı ?
-
form1 den form2 yi açtırdığın zaman,
form2 de bir form1 nesnesi oluştur ve form1i oraya referans ver..
sonrasında form2 de o nesnene her atıfta bulunduğunda form1i etkilersin
-
ThundeR sayesinde çözüldü. Kendisine çok ama çok teşekkür ediyorum... Çözümü de şu şekilde oldu :
textbox5 global olmadığı için şu şekilde tanımladık :
public string txtBox { set { textBox5.Text = value; } }
daha sonra :
private void dataGridView2_CellContentClick(object sender, DataGridViewCellEventArgs e) { string ilac = dataGridView2.CurrentRow.Cells[0].Value.ToString();
//yöntem 1 : // anaFormum.txtBox = ilac; // yöntem 1 için form2 nin public partialında public form1 anaFormum; tanımladık
//form1 in form2 yi açan buttonunda form2 yi frm.anaformum=this; diye aktardık unutmuşum :)
//yöntem2 : // ((Form1)Application.OpenForms["Form1"]).txtBox = ilac; }şeklinde çözdük olayı ThundeR'a tekrar çok teşekkür ediyorum :)
unchain tarafından 30/Ara/12 22:47 tarihinde düzenlenmiştir -
Daha profesyonel bir çözüm ve daha kompleks durumlar için Function Pointer kullanabilirsin.
-
Sscheme bunu yazdı
Daha profesyonel bir çözüm ve daha kompleks durumlar için Function Pointer kullanabilirsin.
nasıl olacak hocam o daha profesyonel biraz açabilir misin ?
-
Örneğin Form1 deki textbox a yazdığın yazıyı Form2 deki fonksiyona göndermek istiyorsun
Form 1 e
// String parametre alıp void döndüren bir delegate yarat public delegate void IsYapDelegate(string value); // Sonra bu delegate in tipinde bir variable (callback) tanımla public IsYapDelegate isyapCallback;
Form2 ye register edilecek fonksiyonları ekle
public void Foo(string str) { label1.Text = str; } public void Bar(string str) { label2.Text = str; }
Sonra Form1 e
// Button1 Form2 yi yaratarak Fonksiyonları Delegate imize register eder. private void button1_Click(object sender, EventArgs e) { Form2 frm = new Form2(); this.isyapCallback += new IsYapDelegate(frm.Foo); this.isyapCallback += new IsYapDelegate(frm.Bar); frm.Show(); } // Son olarak Button2 ye tıkladığımızda Form2 ye textBox ımızdaki değeri gönderir. Form2 de bunu label larında gösterir private void button2_Click(object sender, EventArgs e) { isyapCallback(textBox1.Text); }
-
form1 deki textboxa yazdıgımı form2 ye göndermek istemiyorum hocam.
form1den form2 sayfası açtırıyorum.. yeni acılan form2 sayfasından form1 deki textboxa ulaşmak istiyorum. -
şöyle bir şey yapabilrisin hocam bu bana göre çok pratik ve çok kişinin bilmediği bir yöntem :)
normalde var olan formdan (form1 diyelim) yeni bir örnek türetince açık olan formdaki değere ulaşamazsın. mesela
form1 açık olsun ve text kutusuna bir şeyler yazdın.
form2 yi oluşturdun ve oradan
form1 frm= new form1();
şeklinde yeniden türetmeye yapabilirsin ama bu sefer ilk açtığın form1 deki değere ulaşamazsın. Mantık buradan çıkıyor işte, daha önce açık olan o forma erişebilmek :) textbox1 e erişmek istediğin içn önce modifier ini public yap ki form2 den ulaşalım
sonra form2 de nerede istiyorsan
Form1 benimForm = (Form1)System.Windows.Forms.Application.OpenForms["Form1"];
yazarsan açık olan form1 e ulaşıp örneğini benimForm değişkenine atmış oluyorsun. Bundan sonraki işin kolay
textbox1.Text = benimForm.textbox1.Text;
yzarak form2 deki textbox1 e, form1 deki textbox1 in değerini atamış olursun
-
Yöntemler uygulanabilir fakat uygulamayı zayıflatır. unbalanced'ın yöntemi daha doğru geliyor bana. Çünkü bir metoda ya da nesneye ulaşabilmenin yolu, nesnenin public olarak erişilmesidir.
program.cs içinde bu işlemler yapılabilir (evet, C#'ın kendisine ters).
YeniHarman tarafından 31/Ara/12 01:56 tarihinde düzenlenmiştir -
unbalanced bunu yazdı
şöyle bir şey yapabilrisin hocam bu bana göre çok pratik ve çok kişinin bilmediği bir yöntem :)
normalde var olan formdan (form1 diyelim) yeni bir örnek türetince açık olan formdaki değere ulaşamazsın. mesela
form1 açık olsun ve text kutusuna bir şeyler yazdın.
form2 yi oluşturdun ve oradan
form1 frm= new form1();
şeklinde yeniden türetmeye yapabilirsin ama bu sefer ilk açtığın form1 deki değere ulaşamazsın. Mantık buradan çıkıyor işte, daha önce açık olan o forma erişebilmek :) textbox1 e erişmek istediğin içn önce modifier ini public yap ki form2 den ulaşalım
sonra form2 de nerede istiyorsan
Form1 benimForm = (Form1)System.Windows.Forms.Application.OpenForms["Form1"];
yazarsan açık olan form1 e ulaşıp örneğini benimForm değişkenine atmış oluyorsun. Bundan sonraki işin kolay
textbox1.Text = benimForm.textbox1.Text;
yzarak form2 deki textbox1 e, form1 deki textbox1 in değerini atamış olursun
Sanırım bende bu yöntemi uyguladım hocam ama başarılı oldum sonuçta sadece sScheme adlı hocamın dediklerine takıldım onun fikrini merak ettiğim için sordum :)