2010-07-29 15 views
8

मैं कुछ घटनाक्रम मैं अपने दम पर बनाया है और उन्हें कैसे को बढ़ाने के लिए जब मैं चाहता हूँ पर सोच रहा था।सी # WinForms में बढ़ाएं कस्टम घटनाओं

शायद अपने आवेदन डिजाइन भी में गड़बड़ है, यदि आप चाहें कि पर एक नज़र हो सकता है।

यह संरचना

ProgramContext 
- Form MainWindow 
    + Control TextBox 
    + Control Button 
    + ... 

इस मामले में है MainWindow.TextBox कुछ जानकारी जो रनटाइम के दौरान अक्सर अद्यतन किया जाता है रखती है। तो, मैं किसी भी तरह यह अपने आप को ताज़ा करने के जब मैं

मैं एक EventHandler अपने Validating -Event को hooking की कोशिश की (इसलिए यह डेटाबेस, जहां यह संग्रह किया गया है से अपने डेटा को फिर से लोड कर सकते हैं) करना चाहते हैं की जरूरत है, लेकिन यह नहीं मालूम था चाल करने के लिए।

तो, मूल रूप से मैं एक विधि है कि ProgramContext

DataTable table = _adapter.GetData(); 
foreach (DataRow row in table.Rows) 
{ 
    MainWindow.TextBox.Text += table.Text.ToString(); 
} 

कि जब भी किसी अन्य विधि (कि table में नया डेटा लिखते हैं) निष्पादित किया जाता है किया जाना चाहिए में डेटा को पुनः लोड करता है।

कोई भी विचार?

उत्तर

13

संपादित करें: ऐसा लगता है आपके सवाल का एक विशिष्ट घटना में hooking के बारे में अधिक है, लेकिन नीचे FWIW सामान्य रूप में कस्टम घटनाओं आग करने के लिए कैसे है।

पाठ बॉक्स क्या मैं समझता हूँ, आप बाहरी पार्टी के एक फार्म पर एक पाठ बॉक्स से उठाया घटनाओं की निगरानी करना चाहते से बदल घटना

हैंडलिंग और फिर एक और फार्म पर डेटा को फिर से लोड करने के लिए?

एक त्वरित और गंदे फार्म पाठ बॉक्स को सार्वजनिक करना होगा और उसके बाद अन्य लोगों को इस घटना

MainForm.textBox1.TextChanged += new System.EventHandler(this.textBox1_TextChanged); 

की सदस्यता सकता है या, सी # के नवीनतम संस्करण में:

MainForm.textBox1.TextChanged += this.textBox1_TextChanged; 

आपका जोड़ना स्वयं का कस्टम इवेंट

एक और, क्लीनर तरीका raise a custom event होगा, - उदाहरण के लिए नीचे MyDataChangedEvent। यह आपको इस तथ्य को दूर करने की अनुमति देगा कि परिवर्तन टेक्स्टबॉक्स से आ रहे हैं।

// Assuming you need a custom signature for your event. If not, use an existing standard event delegate 
public delegate void myDataChangedDelegate(object sender, YourCustomArgsHere args); 

// Expose the event off your component 
public event myDataChangedDelegate MyDataChangedEvent; 

// And to raise it 
var eventSubscribers = MyDataChangedEvent; 
if (eventSubscribers != null) 
{ 
    eventSubscribers(this, myCustomArgsHere); 
} 

तुम भी Ent लिब कम्पोजिट आवेदन ब्लॉक और स्मार्ट क्लाइंट सॉफ़्टवेयर फैक्टरी में लग सकता है - इस यूआई "SmartParts" भर में सिंक्रनाइज़ करने के लिए एक बहुत लचीला घटना ब्रोकिंग/पब उप तंत्र है (, नियंत्रण आदि संवाद रूपों) एक ढीले-युग्मित फैशन में।(सीएबी अब बहुत दिनांकित है)।

+3

अपने उदाहरण में, बजाय एक नया प्रतिनिधि घोषित करने के, यह सिर्फ 'सार्वजनिक समारोह eventhandler में के रूप में सामान्य उपयोग करने के लिए' EventHandler' साफ हो जाएगा MyEvent' –

+0

मैं भी 'TextChanged' को hooking की कोशिश की है, लेकिन जो एक अनंत लूप में समाप्त होगा, क्योंकि मैं EventHandler –

+1

के भीतर टेक्स्ट को बदलना चाहता हूं आप हैंडलर के भीतर टेक्स्ट बदल सकते हैं लेकिन आपको विधि की अवधि के लिए ईवेंट को नीचे ले जाने की आवश्यकता है।आप इसे इस तरह से कर सकते हैं: कॉल करें 'this.TextChanged - = SomeClassName_TextChanged' इस कॉलर के लिए ईवेंट को अक्षम करने के लिए, विधि में कुछ चीज़ें करें और फिर इसे 'पुनः दबाएं। = SomeClassName_TextChanged' ईवेंट को फिर से सक्रिय करने के लिए कॉल करें। – Nebula

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