2010-04-01 12 views
5

कुल एन 00 बी से सी # और घटनाओं को अपडेट करने के लिए किसी अन्य कक्षा में किसी ईवेंट को ट्रिगर करने के लिए मेरी कक्षाओं में से एक की आवश्यकता है हालांकि मैं थोड़ी देर के लिए प्रोग्रामिंग कर रहा हूं।सी #: टेक्स्ट बॉक्स

मेरे पास एक टेक्स्ट बॉक्स वाला एक वर्ग है। यह वर्ग एक संचार प्रबंधक वर्ग का एक उदाहरण बनाता है जो सीरियल पोर्ट से फ्रेम प्राप्त कर रहा है। मेरे पास यह सब ठीक काम कर रहा है।

प्रत्येक बार जब कोई फ्रेम प्राप्त होता है और उसका डेटा निकाला जाता है, तो मैं इस फ्रेम डेटा को टेक्स्ट बॉक्स में जोड़ने के लिए टेक्स्ट बॉक्स के साथ अपनी कक्षा में चलाने की विधि चाहता हूं।

तो, मेरे कोड के सभी पोस्ट किए बिना मैं अपने प्रपत्र वर्ग ...

public partial class Form1 : Form 
{ 
    CommManager comm; 

    public Form1() 
    { 
     InitializeComponent(); 
     comm = new CommManager(); 

    } 

    private void updateTextBox() 
    { 
     //get new values and update textbox 
    } 
    . 
    . 
    . 

है और मैं अपने CommManager वर्ग

class CommManager 
{ 
    //here we manage the comms, recieve the data and parse the frame 
} 

अतः ... अनिवार्य रूप से है, जब मुझे लगता है कि पार्स फ्रेम, मुझे फॉर्म क्लास को अद्यतन करने के लिए फॉर्म क्लासबॉक्स विधि की आवश्यकता है। मुझे लगता है कि यह घटनाओं के साथ संभव है लेकिन मुझे यह काम करने के लिए प्रतीत नहीं होता है।

मैं नीचे के रूप में CommManager के उदाहरण बनाने के बाद प्रपत्र कक्षा में एक ईवेंट हैंडलर जोड़ने की कोशिश की ...

comm = new CommManager(); 
comm.framePopulated += new EventHandler(updateTextBox); 

... लेकिन मैं यह गलत कर रही होगी के रूप में संकलक यह पसंद नहीं करता ...

कोई विचार ?!

+0

क्या संकलक त्रुटि: दिशानिर्देश टिप्पणी में उल्लेख किया नामकरण? –

+0

क्या आप फ्रेम प्रबंधक के लिए कम प्रबंधक ईवेंट हैंडलिंग संपत्ति/फ़ंक्शंस पोस्ट कर सकते हैं –

+0

क्या आप "फ्रेमपोप्लेटेड" की प्रतिनिधि परिभाषा पेस्ट कर सकते हैं? –

उत्तर

10

आपका कोड कुछ ऐसा दिखाई देगा:

public class CommManager() 
{ 
    delegate void FramePopulatedHandler(object sender, EventArgs e); 

    public event FramePopulatedHandler FramePopulated; 

    public void MethodThatPopulatesTheFrame() 
    { 
     FramePopulated(); 
    } 

    // The rest of your code here. 
} 

public partial class Form1 : Form  
{  
    CommManager comm;  

    public Form1()  
    {  
     InitializeComponent();  
     comm = new CommManager();  
     comm.FramePopulated += comm_FramePopulatedHander; 
    }  

    private void updateTextBox()  
    {  
     //get new values and update textbox  
    } 

    private void comm_FramePopulatedHandler(object sender, EventArgs e) 
    { 
     updateTextBox(); 
    } 
} 

और यहाँ नेट इवेंट के लिए एक लिंक है

MSDN - Event Naming Guidelines

+0

एमएसडीएन इवेंट नामकरण दिशानिर्देशों से: "इस प्रकार की घटना घोषणा पर उपसर्ग या प्रत्यय का उपयोग न करें। उदाहरण के लिए, ऑनक्लोज़ के बजाय बंद करें का उपयोग करें।" –

+0

किसी अन्य प्रश्न के लिए खेद है, लेकिन जब भी मैं अपने फ्रेम को पॉप्युलेट करता हूं, तो क्या मैं ईवेंट को ट्रिगर करने के लिए फ़्रेमपोलेट पर कॉल करता हूं? – Matt

+0

@ मैट हां। मैंने इसे उपरोक्त कोड में जोड़ा। –

2

Here आपके पास "सरलतम सी # घटनाक्रम उदाहरण कल्पनाशील" है। हालांकि कि सबसे अच्छा डिजाइन नहीं हो सकता है

private void updateTextBox(object sender, Eventargs ea) 

: -

+0

क्या आप फिर से लिख सकते हैं? मैं यह नहीं बता सकता कि क्या आप मुझे कुछ जोड़ने के लिए प्रयास कर रहे हैं या क्या .... – Matt

+0

"यहां" संसाधन का लिंक है। – thelost

0

हाँ करने के लिए updateTextBox के हस्ताक्षर बदल जाते हैं। चीजें एक बहुत neater देखो होगा यदि आप एक उचित ईवेंट हैंडलर, और फिर updateTextBox वहां से बुलाया लिखा था ...

1

    public partial class Form1: Form 
    { 
     CommManager comm; 

     public Form1() 
     { 
      InitializeComponent(); 
      comm = new CommManager(); 
      comm.OnFramePopulated += new EventHandler(updateTextBox); 
     } 

     private void updateTextBox(object sender, EventArgs ea) 
     { 
      //update Textbox 
     } 
    } 

    class CommManager 
    { 
     public EventHandler OnFramePopulated; 

     public void PopulateFrame() 
     { 
      OnFramePopulated(this, null); 
     } 
    } 
संबंधित मुद्दे