2012-07-02 17 views
6

से एक्सेस फॉर्म विधि, इसलिए, अब तक मैं सुराग से बहुत अधिक हूं, यह भी सुनिश्चित नहीं है कि यह सब के बाद संभव है या नहीं। मेरे पास एक विज़ुअल सी # फॉर्म है, जो प्रोग्राम.cs द्वारा चलाया जाता है (मानक तरीका - वीएस ने पाठ्यक्रम के सभी सेटअप कार्य किए हैं)।किसी अन्य स्थैतिक वर्ग

इसके अलावा, मेरे पास एक अलग सी # फ़ाइल में स्थिर विधि वाला एक वर्ग है, क्योंकि सिर्फ एक वर्ग को एक फ़ाइल में रखना पसंद है।

मेरे प्रपत्र कोड एक सार्वजनिक समारोह है: समय की एक निश्चित बिंदु पर

public void print(String text) 
{ 
    rtb_log.appendText("\n" + text); 
} 

, मैं अन्य वर्ग से स्थिर समारोह फोन कर रहा हूँ।

क्या यह संभव है कि वास्तव में मेरी दूसरी कक्षा से उस प्रिंट विधि तक पहुंच जाए? चूंकि यह rtb_log (एक समृद्ध टेक्स्ट बॉक्स) का जिक्र कर रहा है, यह केवल तभी उपलब्ध है जब इंस्टॉलेशन किया गया हो, और निश्चित रूप से स्थिर नहीं है। लेकिन चूंकि स्थैतिक विधियां केवल स्थिर सदस्यों तक पहुंच सकती हैं, इसलिए मैं यहां किसी अन्य वर्ग से अपने फॉर्म पर कुछ टेक्स्ट जोड़ने के तरीकों से थोड़ा सा विचार कर रहा हूं।

कोई मदद यहाँ?

उत्तर

7

लेकिन चूंकि स्थैतिक विधियां केवल स्थिर सदस्यों तक पहुंच सकती हैं, इसलिए मैं यहां किसी अन्य वर्ग से अपने फॉर्म पर कुछ पाठ जोड़ने के तरीकों से थोड़ा सा विचार कर रहा हूं।

स्टेटिक सदस्य इंस्टेंस सदस्यों तक पहुंच सकते हैं - उन्हें बस यह जानने की आवश्यकता है कि किस विधि को कॉल करना है। तो अगर आप लिख सकते हैं:

public static void Foo(OtherForm myOtherForm) 
{ 
    // Do some stuff... 
    myOtherForm.Print(); // Case changed to comply with naming conventions 
} 

फिर जब आप कॉल विधि, आप प्रासंगिक प्रपत्र के लिए एक संदर्भ भी देनी होगी। मूल रूप से कुछ यह निर्धारित करना है कि आप किस उदाहरण को Print पर कॉल करना चाहते हैं। काम करें कि कौन सी जानकारी है, और वहां से इसे पास करें। मैं के विरुद्ध इस जानकारी को रखने के लिए एक स्थिर चर का उपयोग कर अनुशंसा करता हूं। (ग्लोबल राज्य परीक्षण करने के लिए कोड कम पुन: प्रयोज्य, कठिन के बारे में तर्क करने, और कठिन बना देता है।)

संपादित करें: टिप्पणी को देखते हुए यह लगता है कि आप की तरह हैं:

// Within the form 
private void HandleClick(object sender, EventArgs e) 
{ 
    SomeClass.StaticMethod(this); 
} 
+0

बेशक, लेकिन मैं अपने मुख्य रूप के उदाहरण को कैसे एक्सेस करूं? मुझे लगता है कि यह सवाल होगा कि मैं वास्तव में काफी जागरूक नहीं हूं। क्या उस उदाहरण तक पहुंचने का कोई तरीका है? यह standart (नया फॉर्म 1()) का उपयोग कर Program.cs की मुख्य विधि में बनाया गया है; इसके अलावा, मेरी नामकरण कन्फेटियन गलती को इंगित करने और मेरी शुरुआती समस्याओं को गंभीरता से लेने के लिए धन्यवाद :) – Eisenhorn

+1

@ क्लोस्क्लपर: ठीक है अगर 'प्रोग्राम'' नया फॉर्म 1() 'बना रहा है तो आपके पास उस बिंदु पर इसका संदर्भ है .. लेकिन आपकी स्थिर विधि क्या कह रही है? इसे एक और तरीका रखने के लिए: यदि आपके फॉर्म के * एकाधिक * उदाहरण बनाए गए हैं, तो आप किसी भी चीज़ को कैसे जान सकते हैं कि 'प्रिंट' विधि को किस पर कॉल करना है? –

+0

मैं बेवकूफ हूं, बेशक आप सही हैं। इतने अंधे होने के लिए खेद है।आपका बहुत बहुत धन्यवाद! [1 मिनट में अपने उत्तर को सही तरीके से चिह्नित करना क्योंकि यह मुझे जल्द से जल्द नहीं देगा>: सी] – Eisenhorn

2

नीचे देखें

class SomeMainClass 
{ 
    private ClassB form = null; 

    private void SomeMethod() 
    { 
     form = new ClassB(); 
     form.Show(); 
     ClassA foo = new ClassA(this); 
    } 

    // Use an accessor. 
    public ClassB Form 
    { 
     get { return this.form; } 
    } 
} 

class ClassA 
{ 
    private SomeMainClass mainClass = null; 

    // Constructor. 
    public ClassA(SomeMainClass _mainClass) 
    { 
     this.mainClass = _mainClass; 
    } 

    private void SomeMethod() 
    { 
     this.mainClass.Form.Print("Something to print"); 
    } 
} 

class ClassB : Form 
{ 
    // Constructor. 
    public ClassB() 
    { 
     InitializeComponent(); 
    } 

    public void Print(String text) 
    {  
     rtb_log.appendText("\n" + text); 
    } 
} 

संपादित करें: यह आपकी टिप्पणी के जवाब में एक मूलभूत पद्धति है। यह संसाधनों के संदर्भ में प्रभावशाली नहीं है लेकिन जो भी आप चाहते हैं ...

मुझे उम्मीद है कि इससे मदद मिलती है।

+0

अफसोस की बात है, यह नहीं है। आप देखते हैं, मेरा फॉर्म (आपके मामले में क्लासबी) प्रोग्राम.cs की मुख्य विधि में मूलभूत रूप से हर साधारण वीसी # जीयूआई के रूप में स्थापित किया जाता है। मेरे पास प्रत्यक्ष उदाहरण नाम नहीं है। या कम से कम मुझे नहीं पता कि इसे कैसे एक्सेस किया जाए, एप्लिकेशन.रुन (नया फॉर्म 1()); मुझे एक उदाहरण नहीं देता है। और यहां तक ​​कि अगर ऐसा हुआ, तो मैं इसे अपने कक्षा ए से एक्सेस नहीं कर पाऊंगा, क्या मैं? – Eisenhorn

+0

इसे कैसे करें के लिए संपादित करें देखें ... – MoonKnight

+0

पहले से ही इसे वोट दिया है। आपको फिर से धन्यवाद :) – Eisenhorn