2010-06-01 16 views
7

क्या कोई मुझे कृपया कुछ कोड बता सकता है कि मैं किसी अन्य वर्ग से फ़ॉर्म क्लास में स्थित फ़ंक्शन कैसे कॉल कर सकता हूं?किसी अन्य कक्षा से फॉर्म क्लास में फ़ंक्शन को कॉल करना, सी # .NET

कुछ कोड बहुत मददगार होंगे!

धन्यवाद

संपादित करें: यह मेरे वर्तमान कोड

public partial class frmMain : Form 
{ 
    //*******Class Instances******* 
    ImageProcessing IP = new ImageProcessing(); 


    //******************** 
    public void StatusUpdate(string text) 
    { 
     tlsStatusLabel.Text = text; 
    }// 


    public frmMain() 
    { 
     InitializeComponent();    
    }// 
} 


class ImageProcessing 
{ 

    private void UpdateStatusLabel(frmMain form, string text) 
    { 
     form.StatusUpdate(text); 
    }// 

    private UpdateLabel() 
    { 
     UpdateStatusLabel(frmMain, "Converting to GreyScale"); 
    } 
} 

समस्या मैं कर रहा हूँ frmMain साथ है।

+0

संभावित डुप्लिकेट http://stackoverflow.com/questions/6803970/access-form-component-from -नहीं-श्रेणी) – Ash

उत्तर

10

ऊपर सूचीबद्ध अनुसार आपकी Program.cs फ़ाइल में मेनफॉर्म का संदर्भ बनाने का एक त्वरित और गंदा तरीका है।

वैकल्पिक रूप से आप कॉल वापस अपने मुख्य फार्म के लिए संभाल करने के लिए एक स्थिर वर्ग बना सकते हैं:

public delegate void AddStatusMessageDelegate (string strMessage); 

    public static class UpdateStatusBarMessage 
     { 

     public static Form mainwin; 

     public static event AddStatusMessageDelegate OnNewStatusMessage; 

     public static void ShowStatusMessage (string strMessage) 
      { 
      ThreadSafeStatusMessage (strMessage); 
      } 

     private static void ThreadSafeStatusMessage (string strMessage) 
      { 
      if (mainwin != null && mainwin.InvokeRequired) // we are in a different thread to the main window 
       mainwin.Invoke (new AddStatusMessageDelegate (ThreadSafeStatusMessage), new object [] { strMessage }); // call self from main thread 
      else 
       OnNewStatusMessage (strMessage); 
      } 

     } 

ऊपर अपने MainForm.cs नाम स्थान है, लेकिन अपने MainForm वर्ग से अलग अंदर दाखिल में रखो।
अगला इस ईवेंट को अपने MainForm.cs मुख्य वर्ग में कॉल करें।

 void UpdateStatusBarMessage_OnNewStatusMessage (string strMessage) 
    { 
      m_txtMessage.Caption = strMessage; 
    } 

फिर जब आप MainForm.cs प्रारंभ करते हैं तो इस ईवेंट को अपने फ़ॉर्म में संभाल लें।

 UpdateStatusBarMessage.OnNewStatusMessage += UpdateStatusBarMessage_OnNewStatusMessage; 

प्रपत्र (एमडीआई) आप कॉल करना चाहते हैं के साथ जुड़े किसी भी UserControl या रूप में, बस हमें निम्नलिखित ...

 UpdateStatusBarMessage.ShowStatusMessage ("Hello World!"); 

क्योंकि यह उस में कहीं से भी कहा जा सकता है स्थिर है आपका कार्यक्रम

+0

धन्यवाद! मैंने आपके विकल्प की कोशिश की लेकिन मुझे "ऑनन्यूस्टैटस मैसेज (strMessage) में एक त्रुटि मिल रही है;" यह कहकर कि ऑनन्यूस्टैटस मैसेज किसी ऑब्जेक्ट – mouthpiec

+0

के उदाहरण पर सेट नहीं है, मैं आपके कोड का हिस्सा कॉपी करना भूल गया! समस्या हल हो गई!) – mouthpiec

+0

मैं सिर्फ टीवाई टाई टाई टाई टाई टाई टाई टाई लॉल कहना चाहता था। चूंकि मैंने अपने नियंत्रण लिखने के लिए सीखा है, और उन लोगों का उपयोग करें, और कोड के साथ मेरे मुख्य रूप को अव्यवस्थित नहीं करते हैं, यह धागा नहीं है मुझे बहुत अच्छे तरीके से soooooooooooooooooo में मदद मिली है। ब्रावो! –

1

आपको एक नया फॉर्म उदाहरण बनाना होगा और फिर इसे उदाहरण का उपयोग करके कॉल करना होगा। यदि यह स्थैतिक है तो आप इसे Form1.Method() पर कॉल करके कॉल कर सकते हैं।

Form1 form1 = new Form1(); 
form1.Method(); 

मैं सुझाव दूंगा कि आप इस सामान्य विधि को किसी अन्य वर्ग में ले जाएं।

यदि यूआई में उपयोग करने के लिए यह सामान्य तरीका है तो बेस फॉर्म क्लास बनाएं और अपने सभी फॉर्म इस बेस फॉर्म क्लास के साथ प्राप्त करें। अब इस सामान्य विधि को मूल रूप में ले जाएं। फिर आप उस से व्युत्पन्न किसी भी फॉर्म से विधि का उपयोग कर सकते हैं।

3

यह काफी आसान है। या तो कॉल में एक मौजूदा फार्म के लिए एक संदर्भ गुजरती हैं, या अपने प्रपत्र का एक नया उदाहरण बनाने और उसके बाद किसी भी अन्य की तरह अपने विधि कॉल: एक स्थिर विधि

public class MyForm : Form 
{ 
    public void DoSomething() 
    { 
     // Implementation 
    } 
} 

public class OtherClass 
{ 
    public void DoSomethingElse(MyForm form) 
    { 
     form.DoSomething(); 
    } 
} 

या यह कर ताकि आप की जरूरत नहीं है एक उदाहरण बनाएं (लेकिन यह ओपन फॉर्म विंडोज़ को संशोधित करने में सक्षम नहीं होगा)।

अद्यतन

यह ImageProcessing वर्ग की तरह दिखता है कभी नहीं प्रपत्र के लिए एक संदर्भ हो जाता है। मैं अपने कोड थोड़ा बदल जाएगा:

class ImageProcessing 
{ 
    private frmMain _form = null;  

    public ImageProcessing(frmMain form) 
    { 
     _form = form; 
    } 

    private UpdateStatusLabel(string text) 
    { 
     _form.StatusUpdate(text); 
    } 
} 

और फिर एक पर्चा निर्माता में छोटे Tweek:

ImageProcessing IP = new ImageProcessing(this); 
+0

धन्यवाद, लेकिन मैं DoSomethingElse फ़ंक्शन को कैसे कॉल करूं? मेरी समस्या यह है कि "फॉर्म" में टाइप करना क्या है? मैं फॉर्म नाम डालने की कोशिश कर रहा हूं लेकिन मुझे एक त्रुटि मिल रही है कि फॉर्म नाम एक प्रकार है लेकिन एक चर के रूप में उपयोग किया जाता है – mouthpiec

+0

@mouthpiec - यदि आप अपने कुछ मौजूदा कोड पोस्ट करते हैं, तो हम आपको एक बेहतर विचार दे सकते हैं आपको क्या करने की आवश्यकता है। –

+0

अपना कोड पोस्ट करें, आपको उस कंपाइलर त्रुटि को प्राप्त करने के लिए कुछ गलत करना होगा। –

1

विधि यूआई से संबंधित नहीं है, तो अपने उदाहरण से एक मैं समझता हूँ कि यह नहीं है , आप एक और वर्ग बना सकते हैं जिसमें इस विधि को शामिल किया जाएगा और फिर इसे अपने फॉर्म क्लास में और किसी अन्य स्थान पर उपयोग करें जहां आप इसका उपयोग करना चाहते हैं।

1

आप क्या कर सकते हैं कि आसान तरीका में: इस लाइन

class Globals 
{ 
    public static Form1 form; 
} 

2- रूप में लोड समारोह में लिखने:

1- सार्वजनिक वर्ग बना सकते हैं और इस तरह सार्वजनिक स्थैतिक चर को परिभाषित

:
public partial class Form1 : Form 
{ 
    private void Form1_Load(object sender, EventArgs e) 
    { 
     Globals.form= this; 
    } 

    public void DoSomthing() 
    { 
     ............ 
    } 
} 

3- अंत में, अपने कस्टम कक्षा में आप फार्म के अंदर सभी सार्वजनिक कार्यों कॉल कर सकते हैं 10

public class MyClass 
{ 
    public void Func1() 
    { 
     Globals.form.DoSomthing(); 
    } 
} 

मुझे आशा है कि इस कोड को आप :) के लिए उपयोगी होगा

[अन्य वर्ग से पहुंच प्रपत्र घटक] (की
संबंधित मुद्दे