Sorduğun soru nesneye yönelik programcılığın en önemli notasını işaret ediyor. Kısaca anlatayım: Uygulamada Form1 ve Form2 adında 2 sınıfın var. Bu sınıflar .NET ile gelen Form sınıfının mirasçısı sınıflar yani formlardır. Uygulamayı çalıştırıldığında başlangıç sınıfının yani Form1'in örneği alınıp yani Form1 tipinde bir nesne hazırlanıp ekrana getiriliyor.
Sonra ekranda uygulamanın başlangıç formu varken Form2 sınıfının örneğini alıp Show() veya ShowDialog() metodu ile ekrana getiriyorsun. Bu sırada yani ekranda 2 form varken ilk formun üzerindeki nesnelere yani Form1 sınıfının üyeleri varsayım olarak Private oldukları için erişemezsin. Bu nedenle ilgilendiğin sınıfın başka sınıflardan erişilebilsin istediğin üyelerini(button veya textbox) Public olarak işaretlemelisin. Bu konu oldukça kapsamlı bir konu olduğu için burada bütün yanlarıyla anlatmak mümkün değil.
“İlginizden dolayı teşekkür ederim.internettede bu konu hakkında bi kaç site gezdim fakat yeteri kadar açıklayıcı örnekler bulamadm.onlarda sizin dediğiniz gibi public olarak işaretlenmesi gerekir falan demişler.public olarak işaretliyorum fakat kod kısmında herhangi birşey yapamıyorum.istediğimi form1 anaform=new form1(); anaform.enabled=true; kodlarıyla yapıyorum fakat bu şekilde yeni bir form1 oluşturuyor.ben bu şekilde istemiyorum.var olan form1i enabled etsin istiyorum.anlıycağınız burada tıkandım.....”
Projenin başlangıç formunun yani Form1 sınıfının kopyası otomatik olarak hazırlanıp ekrana getiriliyor. Projedeki ikinci formun örneğini(yani nesne hazırlama işlemini) kendin alıp ekrana getiriyorsun. 2. formun kopyası üzerinde çalışırken otomatik olarak hazırlanıp projenin başlangıç formu yapılan Form1 sınıfının örneğine ulaşmak istiyorsun.
Bu sorunu çözmenin değişik yöntemleri olmakla birlikte en kestirmesi ve sağlıklısı Application sınıfından yararlanmaktır. Sorununu çözmene yardımcı olmak için 2 forma sahip bir proje hazırladım. İlk forma bir TextBox ve button yerleştirdim. İlk formdaki düğme tıklandığında ikinci form ekrana gelecek. İşte ilk formdaki düğmenin Click olayını temsil etmesi için yazdığım metot.
namespaceWindowsFormsApplication1
{
public partial classForm1 : Form
{
publicForm1()
{
InitializeComponent();
}
private voidbutton1_Click(objectsender, EventArgs e)
{
Form2 F2 = newForm2();
F2.Show();
}
}
}
Form1’de bu hazırlığı yaptıktan sonra Form2’nin üzerine yine bir Button ve bir TextBox yerleştirdim. Form2 aktif form iken Form2’nin üzerindeki düğme tıklandığı zaman Form2’deki TextBox’ın içeriği Form1’deki yani projenin başlangıç formunun üzerindeki TextBox’a aktarılacak. Bu amaçla yazdığım kod aşağıdadır. Bu bilgilerin ışığında sorununu çözebilirsin. Tabi bu teknikle Form1’deki TextBox’ın Modifiers özelliğinde değişiklik yapmaya gerek yoktur.
namespaceWindowsFormsApplication1
{
public partial classForm2 : Form
{
publicForm2()
{
InitializeComponent();
}
private voidbutton1_Click(objectsender, EventArgs e)
{
Application.OpenForms[0].Controls["textBox1"].Text = textBox1.Text;
}
}
}