Effort Posted February 7, 2017 Share Posted February 7, 2017 Birşeyi farkettim proje ile uğraşırken DataGridView'in Modifier özelliği public olmasına rağmen yine de başka class'lardan erişemedim. Merakımdan soruyorum bunun sebebi nedir? benden mi kaynaklanıyor acaba yoksa mevcut olarak böylemi? Quote Link to comment Share on other sites More sharing options...
xmen14 Posted February 7, 2017 Share Posted February 7, 2017 Erişmeye çalıştığınız kodu yayınlar mısınız? Quote Link to comment Share on other sites More sharing options...
Editor pairs Posted February 7, 2017 Editor Share Posted February 7, 2017 Erişmeye çalıştıgınız class static olması lazım. 1 Quote Link to comment Share on other sites More sharing options...
Effort Posted February 7, 2017 Author Share Posted February 7, 2017 static olmasının sebebi nedir abi? static bir sınıfa static olmayan bir üye tanımlanamayacağı içinmi? Yani anladığım DataGridView static olduğu için? @pairs Quote Link to comment Share on other sites More sharing options...
xmen14 Posted February 7, 2017 Share Posted February 7, 2017 public void DataGridOdaklan() // Class Name { Form1 frm = new Form1(); frm.DataGridView1.Focus();// } 1 Quote Link to comment Share on other sites More sharing options...
KintaRo Posted February 8, 2017 Share Posted February 8, 2017 15 saat önce, xmen14 yazdı: public void DataGridOdaklan() // Class Name { Form1 frm = new Form1(); frm.DataGridView1.Focus();// } bu şekilde yaparsanız formu yeniden tanımladığınız için açık olan formdaki gride ulaşmakl isteniyorsa işe yaramaz. DataGridView grid = (DataGridView)Application.OpenForms["Form1"].Controls[3]; bu şekilde olabilir ama gridin o formdaki kaçıncı kontrol olduğunu bilmeniz gerekir. Formdaki kontrolleri foreach'e sokarak Control.GetType() == typeof(DataGridView) şeklinde kontrol yapılabilir. 2 Quote Link to comment Share on other sites More sharing options...
artal73 Posted February 8, 2017 Share Posted February 8, 2017 Form2'nin bir örneğini çağırdığınız yerde "this" anahtar kelimesini ekleyin. aşağıdaki resimdeki gibi. Form2 üzerinden Form1 deki Datagridview'e direkt ulaşmak içinse aşağıdaki resimdeki eklemeleri yapın. Artık "_frm1" alanından Datagridview'e ulaşabilirsiniz. 2 Quote Link to comment Share on other sites More sharing options...
Effort Posted February 8, 2017 Author Share Posted February 8, 2017 (edited) Yardımlarınız için teşekkür ederim. Peki niçin Modifiers özelliğinden ulaşamıyoruz DataGridView'e. Bunu farklı kılan nedir? @KintaRo Hocam hiç aklıma gelmedi çözüm yolunuz. Sade ve basit. Teşekkür ederim. @artal73 2.resmi anlatabilirmisiniz müsait iseniz acaba? Edited February 8, 2017 by Effort Quote Link to comment Share on other sites More sharing options...
KintaRo Posted February 8, 2017 Share Posted February 8, 2017 Modifiers özelliği bir class'ı tanımlama esnasında kullanabilmeniz içindir. Yani Form1 frm = new Form1(); frm1.dataGridView1.Rows.Clear(); diyebilirsiniz. Ama o formu daha önceden açmışsanız ve ona ulaşmak istiyorsanız bu özellikten faydalanamazsınız. Ben hep Application.OpenForms'dan ulaştım bugüne kadar. Kontrolleri iyi yaparsanız sorun çıkmıyor. @artal73 arkadaşın bahsettiği yöntem Formu parametre olarak diğer forma gönderip içindeki kontrollere ulaşmaya dayanıyor. Teoride güzel duruyor, pratikte denemek lazım ama. 2 Quote Link to comment Share on other sites More sharing options...
artal73 Posted February 8, 2017 Share Posted February 8, 2017 (edited) "Stack" ve "Heap" kavramlarını anlamalısınız öncelikle. stack ve heap ram üzerindeki verinin tutulduğu bölümlerdir. stack’de değer tipleri ve heap üzerinde bulunan referans tipli değerlerin adresleri saklanır. Heap'de ise referans tiplerinin değerleri saklanır. "new" anahtar kelimesiyle oluşturulan nesneler referens tiplidir. Heap'de tutulur ama adresi stack bölgesinde tutulur. Şimdi biz Form2 üzerindeyken "Form1 frm = new Form1()" ifadesini yazdığımızda ne oluyor? Form1'e mi ulaşıyoruz! hayır sadece açık olan Form1 nesnesinden yeni bir örnek türetiyoruz. Excel'deki yeni butonuna tıkladıgımızda açılan aynı sayfalar gibi. O halde belirli bir Form'a ulaşmak istiyorsak: heap bölgesinde bulunan nesnenin stack deki adresini point etmemiz lazım. 1. resimdeki "this" ifadesi ve 2. resimdeki "public Form2(Form1 frm1)" ifadeleri bu adreslemeyi sağlıyor. "Form1 _frm1;" ifadesiyle Form1 türünde bir "field" oluşturup _frm1 = frm1; ifadesi ile de aldığımız adresi _frm1 field'ına aktarıyoruz. Artık _frm1 Form1'i adresliyor. Vermiş olduğum Çözüm @KintaRo 'nun çözümüne bir alternatiftir sadece. her iki şekilde de çalışır. Edited February 8, 2017 by artal73 3 Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.