Jump to content
Son zamanlarda artan kullanıcı hesap hırsızlıkları sebebiyle tüm kullanıcılara şifre sıfırlama maili gönderilmiştir. Lütfen güveli şifreler seçiniz. Mevcut e-mail adresinize erişemiyorsanız, en aşağıdaki destek linkinden bize ulaşınız. ×

Datagridview'e Neden Başka Class'lardan Erişim Sağlanamıyor?


Effort
 Share

Recommended Posts

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?

Link to comment
Share on other sites

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.

  • Like 2
Link to comment
Share on other sites

Form2'nin bir örneğini çağırdığınız yerde "this" anahtar kelimesini ekleyin. aşağıdaki resimdeki gibi.

frm2Ac.PNG.a5f5343ff00f810a6a0f2c2155e1a522.PNG

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.

frm1Access.PNG.d37b92995d6e5771f45dd219197fb1af.PNG

  • Like 2
Link to comment
Share on other sites

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 by Effort
Link to comment
Share on other sites

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.

  • Like 2
Link to comment
Share on other sites

"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 by artal73
  • Like 3
Link to comment
Share on other sites

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.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...