2012-05-14 22 views
5

Ben C# ve görsel stüdyosunda bir acemi değilim, ama genel olarak programlama değil. 3 gün boyunca soruma cevap aradım ve bunların çoğunu buldum, ama bazı garip nedenlerden dolayı (eminim ki çok açık bir şey eksik olduğumdan) Çalışamadım. Sanırım benim gibi sorduğum en önemli soru yeniler. Bir metin kutusu ve bir düğmeyle bir formum (Form3) var (bunu ayarlamak için yalnızca sınama amaçlıdır). Bu metin kutusunu başka bir sınıftan doldurmak ve okumak istiyorum. Bunu yapmanın en doğru yolunun, GET ve SET erişim sağlayıcılarıyla Form3.cs'te bir özellik oluşturması olduğunu anlıyorum. Bunu yaptım ama işe yaramayacağım. Hata mesajı alıyorum, ancak metin kutusunun değerini de ayarlayamıyorum. Sadece boş kalır.Form Kontrolünün başka bir sınıftan C#

namespace WindowsFormsApplication1 
{ 
    public partial class Form3 : Form 
    { 
     public string setCodes 
     { 
      get { return test1.Text; } 
      set { test1.Text = value; } 
     } 

     public Form3() 
     { 
      InitializeComponent(); 
     } 

     private void Form3_Load(object sender, EventArgs e) 
     { } 

     private void button1_Click(object sender, EventArgs e) 
     { 
      a.b(); 
     } 
    } 

    public class a 
    {  
     public static void b() 
     { 
      Form3 v = new Form3(); 
      v.setCodes = "abc123"; 
     } 
    } 
} 

Birisi bana bu çözümü bir el ödünç verir: İşte benim örnek kod var?

+1

(Designer.cs) (veya 'statik' anahtar kelimesi fikri ve nesnelerin örneklerinin nasıl çalıştığını düşünün. Bunu bulmak için yardıma ihtiyacınız varsa, Google'ı kullanın, temel nesne yönelimli programlama girişlerini arayın veya burayı sorun. –

+0

Merhaba Tim,% 100 doğru sizsiniz. Yardıma ihtiyacım var ve statik anahtar kelimeyi nasıl kullanacağımı öğrenmeliyim. Bu sorunun en azından bir kısmının nerede olduğunu hissettim. -Tony. – Tony

cevap

2

Bir marka new Form3() örneğini oluşturuyorsunuz.
Bu, mevcut formu etkilemez.

Formu, yönteme parametre olarak iletmeniz gerekir.

5

Sorun, değeri formun yeni bir örneğine ayarlıyorsunuz. Böyle bir şey deneyin:

public partial class Form3 : Form { 
    public string setCodes 
    { 
     get { return test1.Text; } 
     set { test1.Text = value; } 
    } 

    private A a; 

    public Form3() 
    { 
     InitializeComponent(); 
     a = new A(this); 
    } 

    private void button1_Click(object sender, EventArgs e) 
    {    
     a.b();    
    } 


    private void Form3_Load(object sender, EventArgs e) 
    { 

    } 
} 

public class A 
{  
    private Form3 v; 

    public a(Form3 v) 
    { 
     this.v = v; 
    } 

    public void b() 
    { 
     v.setCodes = "abc123"; 
    } 
}  
+0

Merhaba ivowiblo, Dediğim gibi, ben yeni biriyim ama Enigmativity tarafından verilen cevap benim için biraz daha az karmaşık görünüyor ve aslında işe yarıyor. Form3'te yeni bir sınıf A örneği oluşturmuyor ve A Sınıfı'nda sadece 1 yöntem var. Cevap veren insanlar olduğu kadar çok benzersiz cevap var gibi görünüyor. İnternetin güzelliği. Cevabınız için teşekkürler, ondan bazı benzersiz bir bakış açısı kazandım. – Tony

+0

Yep. Söylemek istediğim, C# nesne yönelimli bir dildir ve ben, prosedürel tasarımlar yerine, nesne yönelimli tasarımları kullanmayı önereceğim. Söylediğiniz gibi, @ Enigmativity'ın çözümü işi yapar ve bu doğrudur. Belki de gerçek senaryonuzda daha karmaşık bir durumunuz var ve bir nesneyi kullanmanız daha kolaylaştıracaktır (daha fazla şey aktarmanız gerektiğini varsayalım, bazıları Form'un bilmediğini varsayalım) – ivowiblo

2

bu deneyin: Bu setCodes özelliği güncelleştirmek böylece

public partial class Form3 : Form 
{ 
    /* Code from question unchanged until `button1_Click` */ 

    private void button1_Click(object sender, EventArgs e) 
    { 
     a.b(this); 
    } 
} 

public class a 
{  
    public static void b(Form3 form3) 
    { 
     form3.setCodes = "abc123"; 
    } 
} 

Bu, diğer sınıfa formun geçerli örneğini geçer. Önceden mevcut formu güncellemek yerine yeni bir form örneği oluşturuyordunuz.

+0

Merhaba, bu çok iyi çalıştı. Yardımın için sağol. -Tony. – Tony

-2
Formunda Public için denetimleri Private değiştirerek başka bir sınıfta denetimlere erişmek için diğer başka sınıfa

Form1 objForm1=new Form1(); 
obj.Validate(objForm1); 

Kolay yolu formu örneği gönderme

Öğrenecek gerekebilir

+0

obj.Validate'i nasıl buldunuz? – Androidz

İlgili konular