क्या प्रत्येक संभावित घटना के लिए स्पष्ट रूप से हैंडलर बनाने के बिना विशिष्ट WinForms नियंत्रणों के लिए सभी निकाल दी गई घटनाओं को सूचीबद्ध करने का कोई तरीका है? उदाहरण के लिए, मैं विभिन्न डेटाबेस क्रियाओं के दौरान डेटाग्रिड व्यू और बाध्यकारी स्रोत के बीच आग लगने वाली घटनाओं का अनुक्रम देखना चाहता हूं।घटनाओं को निकालने के लिए नियंत्रण देखें?
उत्तर
आप कर सकते थे प्रतिबिंब का उपयोग करें, लेकिन यह विभिन्न घटना हैंडलर हस्ताक्षर शामिल होने के कारण थोड़ा मुश्किल हो जाएगा। मूल रूप से आपको EventInfo
प्रकार के प्रत्येक ईवेंट के लिए EventInfo
प्राप्त करना होगा, और संपत्ति का उपयोग करने के लिए AddEventHandler
पर कॉल करने से पहले किस प्रतिनिधि प्रकार को बनाना है। Delegate.CreateDelegate
सामान्य घटना हैंडलर पैटर्न का पालन करने वाली हर चीज के लिए काम करता है ...
यहां एक नमूना ऐप है। ध्यान दें कि यह कोई जांच नहीं कर रहा है - यदि आप इसे "गैर-मानक" ईवेंट के साथ कुछ देते हैं तो यह अपवाद फेंक देगा। आप इवेंट तर्कों को प्रिंट करने के लिए काफी आसानी से प्रतिबिंब का उपयोग कर सकते हैं।
using System;
using System.Drawing;
using System.Windows.Forms;
using System.Reflection;
namespace ConsoleApp
{
class Program
{
[STAThread]
static void Main(string[] args)
{
Form form = new Form { Size = new Size(400, 200) };
Button button = new Button { Text = "Click me" };
form.Controls.Add(button);
EventSubscriber.SubscribeAll(button);
Application.Run(form);
}
}
class EventSubscriber
{
private static readonly MethodInfo HandleMethod =
typeof(EventSubscriber)
.GetMethod("HandleEvent",
BindingFlags.Instance |
BindingFlags.NonPublic);
private readonly EventInfo evt;
private EventSubscriber(EventInfo evt)
{
this.evt = evt;
}
private void HandleEvent(object sender, EventArgs args)
{
Console.WriteLine("Event {0} fired", evt.Name);
}
private void Subscribe(object target)
{
Delegate handler = Delegate.CreateDelegate(
evt.EventHandlerType, this, HandleMethod);
evt.AddEventHandler(target, handler);
}
public static void SubscribeAll(object target)
{
foreach (EventInfo evt in target.GetType().GetEvents())
{
EventSubscriber subscriber = new EventSubscriber(evt);
subscriber.Subscribe(target);
}
}
}
}
मुझे लगता है कि आप ऐसा करने के लिए प्रतिबिंब का उपयोग कर सकते हैं।
यह नहीं किया जा सकता है। आप फ्रेमवर्क की कक्षाओं का एक बहुत देखने के लिए परावर्तक का उपयोग करते हैं आप जब घटनाओं फायरिंग एक आम पैटर्न मिल जाएगा:
// fire event
if (EventDelegate != null)
EventDelegate(eventArgs);
तो घटना भले ही कोई भी इसे की सदस्यता है निकाल दिया नहीं है
मुझे नहीं लगता कि इसका मतलब क्यों नहीं किया जा सकता है - इसका मतलब यह है कि ईवेंट की सदस्यता लेने की आवश्यकता है। उस कोड में प्रत्येक घटना के लिए स्पष्ट रूप से * सदस्यता लेते हुए * और * के बीच एक बड़ा अंतर है। –
मुझे लगता है कि आप बाल बांट रहे हैं। या तो हार्ड कोडित प्रतिनिधियों को बनाकर या प्रतिबिंब का उपयोग करके आप अभी भी 'स्पष्ट रूप से' ईवेंट हैंडलर जोड़ रहे हैं। मेरी प्रतिक्रिया मान ली गई कि वह घटनाओं की सदस्यता लेना नहीं चाहता था (यहां तक कि प्रतिबिंब के माध्यम से) लेकिन कुछ अन्य फैशन में घटनाओं का अनुक्रम देखना चाहता था। –
- 1. पर्चे परत नियंत्रण घटनाओं?
- 2. निकालने के लिए Nuget और स्रोत नियंत्रण फ़ाइलें?
- 3. UITextFieldDelegate बनाम UITextField नियंत्रण घटनाओं
- 4. उपयोगकर्ता नियंत्रण घटनाओं के लिए डिज़ाइन समय देखने
- 5. हस्तांतरण की माउस माता पिता नियंत्रण करने के लिए घटनाओं
- 6. विनफॉर्म उपयोगकर्ता नियंत्रण कस्टम घटनाओं
- 7. घटनाओं पर क्लिक करने के लिए "पारदर्शी" नियंत्रण बनाना
- 8. फायरबग: ऑब्जेक्ट की संलग्न घटनाओं को कैसे देखें?
- 9. तत्वों को निकालने के लिए कैसे
- 10. सेलेनियम आर सी और इनपुट नियंत्रण घटनाओं
- 11. अंतर्निहित नियंत्रण की घटनाओं का खुलासा
- 12. रूट के लिए bash_history को कैसे देखें?
- 13. किसी घटक पदानुक्रम के लिए महत्वपूर्ण घटनाओं को सुनना
- 14. एचटीएमएल ट्रीबिल्डर XPath लिंक निकालने के लिए
- 15. चेतावनी को निकालने के डेटाबेस
- 16. Deserialization के लिए जैक्सन जेसन देखें
- 17. DataVridueChanged बनाम CellValidating घटनाओं के लिए DataGridView
- 18. "घटनाओं"
- 19. विंडोज़ में झिलमिलाहट को खत्म करने के लिए कैसे। स्क्रॉल करते समय कस्टम नियंत्रण नियंत्रण?
- 20. पायथन लाइब्रेरी 'एपब' जानकारी निकालने के लिए
- 21. matplotlib plot से डेटा निकालने के लिए
- 22. एसएसई निकालने के लिए केवल एसएसई 2
- 23. ओएलई कंटेनर की सामग्री को निकालने के लिए कैसे?
- 24. लिनक्स में tar.xz फ़ाइलों को निकालने के लिए कैसे?
- 25. केवल जेडीके इंस्टॉलर की सामग्री को निकालने के लिए
- 26. मैटलैब - लाइनों को निकालने के लिए वाटरशेड - खो जानकारी
- 27. फ़ोटोशॉप फ़ाइल से परतों को निकालने के लिए कैसे? सी #
- 28. addObserver को कॉल करने और निकालने के लिए संभावित स्थान
- 29. एप्लिकेशन को अनइंस्टॉल/निकालने के लिए पासवर्ड की आवश्यकता है
- 30. एसक्यूएल कमांड को SQLite तालिका की स्कीमा निकालने के लिए?
बिल्कुल वही जो मैं खोज रहा था! ऐसा लगता है कि मुझे कुछ गंभीर पढ़ने और प्रतिबिंब के साथ tinkering करने की जरूरत है। धन्यवाद! – BikeMrown
वास्तव में बहुत उपयोगी है। धन्यवाद। –