2012-05-14 22 views
5

मैं सी # और विजुअल स्टूडियो में नौसिखिया हूं, लेकिन सामान्य रूप से प्रोग्रामिंग नहीं कर रहा हूं। मैंने 3 दिनों के लिए अपने प्रश्न का उत्तर खोजा और मुझे उनमें से बहुत कुछ मिला, लेकिन कुछ अजीब कारणों से (मुझे यकीन है कि मुझे कुछ बहुत याद आ रही है) मैं इसे काम नहीं कर सकता। मुझे लगता है कि यह मेरे जैसे पूछे जाने वाले नए मूल प्रश्न हैं। मेरे पास एक टेक्स्ट बॉक्स और एक बटन के साथ एक फॉर्म (फॉर्म 3) है (मैंने इसे सेट अप केवल परीक्षण उद्देश्यों के लिए है)। मैं इस पाठ बॉक्स को किसी अन्य वर्ग से पॉप्युलेट करना और पढ़ना चाहता हूं। मैं समझता हूं कि ऐसा करने का सबसे उचित तरीका है GET और SET एक्सेसर्स के साथ Form3.cs में एक संपत्ति बनाना। मैंने ऐसा किया लेकिन मैं इसे काम नहीं कर सकता। मुझे कोई त्रुटि संदेश नहीं मिल रहा है, लेकिन मैं टेक्स्ट बॉक्स का मान भी सेट नहीं कर पा रहा हूं। यह बस खाली रहता है। यहाँ मेरी नमूना कोड:किसी अन्य वर्ग से फॉर्म का नियंत्रण एक्सेस करना 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"; 
     } 
    } 
} 

किसी ने मुझे एक हाथ इस सुलझाने उधार दे सकते हैं?

+1

आप जानने के लिए आवश्यकता हो सकती है (या ब्रश करें) 'स्थिर' कीवर्ड का विचार, और वस्तुओं के उदाहरण कैसे काम करते हैं। अगर आपको इसे ढूंढने में मदद की ज़रूरत है, तो Google का उपयोग करें, मूल ऑब्जेक्ट उन्मुख प्रोग्रामिंग परिचय देखें, या यहां पूछें। –

+0

हैलो टिम, आप 100% सही हैं। मुझे मदद हिट करने और स्थिर कीवर्ड का उपयोग करने के तरीके सीखने की जरूरत है। मुझे लगता है कि यह वह जगह है जहां समस्या का कम से कम हिस्सा था। -Tony। – Tony

उत्तर

2

आप एक ब्रांड new Form3() उदाहरण बना रहे हैं।
यह मौजूदा फॉर्म को प्रभावित नहीं करता है।

आपको विधि को विधि के पैरामीटर के रूप में पास करने की आवश्यकता है।

5

समस्या यह है कि आप फॉर्म के नए उदाहरण के लिए मान निर्धारित कर रहे हैं। कुछ इस तरह का प्रयास करें:

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

हाय ivowiblo, जैसा कि मैंने कहा, मैं एक नौसिखिया हूँ लेकिन इनिग्मैटीविटी द्वारा नीचे दिया गया जवाब मेरे लिए थोड़ा कम जटिल प्रतीत होता है और यह वास्तव में काम करता है। वह फॉर्म 3 में कक्षा ए का नया उदाहरण नहीं बनाते हैं और कक्षा ए में केवल 1 विधि है। ऐसा लगता है कि वहां कई अनूठे उत्तर हैं जैसे लोग जवाब दे रहे हैं। इंटरनेट की सुंदरता। आपके उत्तर के लिए धन्यवाद, मैंने इससे कुछ अद्वितीय परिप्रेक्ष्य प्राप्त किया। – Tony

+0

हाँ। मैं क्या कहूंगा कि सी # एक ऑब्जेक्ट उन्मुख भाषा है और मैं प्रक्रियात्मक डिजाइनों के बजाय ऑब्जेक्ट ओरिएंटेड डिज़ाइन का उपयोग करने का सुझाव दूंगा। जैसा कि आप कहते हैं, @ इनिग्मैटीविटी का समाधान नौकरी करता है और यह सही है। हो सकता है कि आपके वास्तविक परिदृश्य में आपके पास एक और जटिल स्थिति हो और किसी ऑब्जेक्ट का उपयोग करना आसान हो जाए (मान लीजिए कि आपको और चीजों को पारित करने की आवश्यकता है, कुछ जिन्हें फॉर्म नहीं पता) – ivowiblo

2

इस प्रयास करें:

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"; 
    } 
} 

यह इतना है कि यह setCodes संपत्ति अद्यतन कर सकते हैं अन्य वर्ग के लिए फार्म की वर्तमान उदाहरण गुजरता है। पहले आप वर्तमान फॉर्म को अपडेट करने के बजाय एक नया फॉर्म उदाहरण बना रहे थे।

+0

हाय, यह बहुत अच्छा काम करता है। तुम्हारी मदद के लिए शुक्रिया। -Tony। – Tony

-2

नियंत्रण फार्म में Public को नियंत्रित करता है Private संशोधित करके एक और कक्षा में पहुँचने के लिए

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

आसान तरीका अन्य अन्य वर्ग के लिए फार्म उदाहरण भेजा जा रहा है (Designer.cs)

+0

आप obj.Validate कैसे प्राप्त करने में सक्षम थे? – Androidz

संबंधित मुद्दे