2012-04-18 13 views
5

मैं इस बारे में कई अन्य उत्तरों और उदाहरणों का अध्ययन कर रहा हूं और मैं इसे स्थापित करने के तरीके पर और अधिक उलझन में हूं। मुझे फॉर्म क्लास में performMove विधि के परिणाम के आधार पर रोबोट कक्षा में एक ईवेंट जुटाने की जरूरत है। मुझे पता है कि मैं इस कार्यक्रम को किसी अन्य वर्ग से नहीं बढ़ा सकता, इसलिए जो मैंने स्पष्ट रूप से काम नहीं किया है। लेकिन मैं वास्तव में इसे ठीक से सेट अप करने के तरीके को समझ नहीं रहा हूं। मैंने कोडप्रोजेक्ट, सपनेइनकोड, और इस साइट में कई अन्य लोगों के बीच प्रतिनिधियों और घटनाओं के लेख पढ़े हैं। यह अभी शुरुआत ग # वर्ग के लिए है, और मैं बहुत इस के लिए नया हूँ, के रूप में मुझे यकीन है कि हर किसी घटना को बढ़ाने के लिए :)घटना को बढ़ाने की कोशिश कर रहा है C#

namespace Assignment12 
{ 
    public delegate void ErrorHandler(); 

public partial class frmRobot : Form 
{ 
    Robot moveRobot = new Robot(); 

    public frmRobot() 
    { 
     InitializeComponent(); 
     reset_Position(); 
     current_Position_Display(); 
     moveRobot.outOfRange += new ErrorHandler(moveRobot.coor_Within_Range); 
    } 
    ... 

    private void performMove() 
    { 
     Point loc = lblArrow.Location; 
     int x = moveRobot.Move_Robot_XAxis(loc.X); 
     int y = moveRobot.Move_Robot_YAxis(loc.Y); 
     if (x < -100 && x > 100) 
     { 
      moveRobot.outOfRange(); 
      x = loc.X; 
     } 
     if (y < -100 && y > 100) 
     { 
      moveRobot.outOfRange(); 
      y = loc.Y; 
     } 
     this.lblArrow.Location = new Point(x, y); 
     current_Position_Display(); 
    } 

class Robot 
{ 

    public event ErrorHandler outOfRange; 
    ... 
    public void coor_Within_Range() 
    { 
     System.Console.WriteLine("TestOK"); 

    } 
} 
+0

क्या कोई त्रुटि है? – Josh

+0

क्षमा करें, हाँ। PerformMove में, लाइन moveRobot.outOfRange() उठाता है "त्रुटि घटना 'Assignment12.Robot.outOfRange' केवल + = या - =" –

+4

के बाईं ओर दिखाई दे सकती है प्रश्न क्या है? इस प्रश्न में कोई प्रश्न नहीं प्रतीत होता है, बल्कि सिर्फ यह बयान है कि आप नहीं जानते कि आप क्या करना चाहते हैं। क्या आप अधिक स्पष्ट रूप से वर्णन कर सकते हैं कि आप क्या करना चाहते हैं? उदाहरण के लिए, "मैं एक वर्ग पर एक विधि बनाना चाहता हूं, जिसे किसी अन्य वर्ग द्वारा बुलाया जाता है, पहली कक्षा को किसी ईवेंट को आग लगने का कारण बनता है"। –

उत्तर

0

आपका coor_Within_Range जरूरतों बता सकते हैं कर रहा हूँ: फिर

public void coor_Within_Range() 
{ 
    System.Console.WriteLine("TestOK"); 
    if (this.outOfRange != null) { 
     this.outOfRange(); 
    } 
} 

public frmRobot() 
{ 
    // snipped 
    moveRobot.outOfRange += new ErrorHandler(this.oncoor_Within_Range); 
} 

public void oncoor_Within_Range() { 
    Console.WriteLine("robot within range"); 
} 
2

आप एक घटना की आवश्यकता प्रतीत नहीं: अपने Form क्लास में घटना को संभालने के लिए की जरूरत है। अभी moveRobot.coor_Within_Range() पर कॉल करने का यह एक जटिल तरीका है। बिचौलियों को काट लें:

if (x < -100 && x > 100) 
    { 
     moveRobot.coor_Within_Range(); 
     x = loc.X; 
    } 

हालांकि भीतर_रेेंज और आउटऑफेंज उत्सुकता से विपरीत नाम हैं।

आपको रोबोट में होने वाली किसी चीज़ के बारे में फ़ॉर्म को सूचित करने के लिए एक कार्यक्रम की आवश्यकता होगी। मैंने answer here पोस्ट करने के तरीके के बारे में पोस्ट किया।

+0

मैं नहीं कर सकता, असाइनमेंट रोबोट कक्षा में एक घटना को उठाना है। –

13

यह प्रश्न काफी भ्रमित है।

प्रश्न जो आपको स्वयं प्रस्तुत करना चाहिए वह है: जो नीति घोषित करने और लागू करने का प्रभारी है? आपके पास दो इकाइयां हैं: "फॉर्म" और "रोबोट"। रोबोट के लिए कानूनी स्थिति क्या है इसके बारे में आपके पास कुछ नीति है। उस नीति के साथ आने के लिए कौन सी कक्षा जिम्मेदार है? रोबोट जानता है कि यह सीमा से बाहर है, और यह उस तथ्य के रूप को सूचित करता है? या फॉर्म जानता है कि रोबोट सीमा से बाहर है, और यह उस तथ्य के रोबोट को सूचित करता है?

यह बात सूचित करने की इच्छा है घटना श्रोता है। यह बात नीति उल्लंघन के अन्य लोगों को सूचित करने की इच्छा रखती है घटना स्रोत है। यह पूरी तरह अस्पष्ट है कि इनमें से एक चीज आप श्रोता बनना चाहते हैं और जिसे आप स्रोत बनना चाहते हैं। लेकिन जिस नियम का आप उल्लंघन कर रहे हैं वह स्पष्ट है: ईवेंट श्रोता ऐसी बात नहीं है जिसे घटना होने पर होता है। संगीत संगीत कार्यक्रम में सुनने के लिए नहीं है और पियानोवादक को निर्देशों को चिल्लाना नहीं है कि किस कुंजी को दबाया जाए! वह पियानोवादक का निर्णय है, और श्रोता केवल यह तय करने के लिए मिलता है कि सुनना है या नहीं, और प्रतिक्रिया कैसे करें।

यदि फॉर्म यह तय करता है कि रोबोट सीमा से बाहर है तो रोबोट श्रोता होने की आवश्यकता है। यदि रोबोट तय करता है कि फॉर्म कब सीमा से बाहर है तो फॉर्म श्रोता होने की आवश्यकता है। अभी आपको फॉर्म श्रोता होने के नाते मिला है, और फिर भी यह रोबोट को सीमा से बाहर होने पर बताने की कोशिश कर रहा है।

+0

मुझे कॉन्सर्ट उदाहरण पसंद है, इच्छा है कि मैं इसे 10 बार बढ़ा सकता हूं। – payo

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