आपको ईवेंट को मैन्युअल रूप से आग लगाने के लिए उपयोगकर्ता द्वारा परिभाषित गेटर्स और सेटर्स (यानी गुण) का उपयोग करना चाहिए। इस कोड को देखो, यह बहुत आसान होना चाहिए:
// We declare a delegate to handle our event
delegate void StateChangedEventHandler(object sender, StateChangedEventArgs e);
// We declare event arguments class to specify, which value has changed to which value.
public class StateChangedEventArgs: EventArgs
{
string propertyName;
object oldValue;
object newValue;
/// <summary>
/// This is a constructor.
/// </summary>
public StateChangedEventArgs(string propertyName, object oldValue, object newValue)
{
this.propertyName = propertyName;
this.oldValue = oldValue;
this.newValue = newValue;
}
}
/// <summary>
/// Our class that we wish to notify of state changes.
/// </summary>
public class Widget
{
private int x;
public event StateChangedEventHandler StateChanged;
// That is the user-defined property that fires the event manually;
public int Widget_X
{
get { return x; }
set
{
if (x != value)
{
int oldX = x;
x = value;
// The golden string which fires the event:
if(StateChanged != null) StateChanged.Invoke(this, new StateChangedEventArgs("x", oldX, x);
}
}
}
}
हमारे सदस्य चर निजी परिभाषित किया गया है, इसलिए वर्ग विजेट उस तक पहुँच सकते के बाहर कोई नहीं; उन्हें संपत्ति विजेट_एक्स का उपयोग करने के लिए मजबूर किया जाता है, और एक बार ऐसा करने के बाद, दो मामले होते हैं:
- उन्हें
x
चर मिलता है। कुछ करने को नहीं है।
- उन्होंने
x
वैरिएबल को पहले के समान मूल्य पर सेट किया था। कुछ करने को नहीं है। हम इसे सेटटर के अंदर जांचते हैं।
- उन्होंने
x
चर सेट किया और इसे बदल दिया। यही वह जगह है जहां हम घटना को आग लगाते हैं।
यह जांचना महत्वपूर्ण है कि हमारे पास ईवेंट आयोजित करने से पहले हमारे पास कोई ईवेंट हैंडलर पंजीकृत है (यानी, हमारा ईवेंट शून्य नहीं है)। दूसरे मामले में, हमें एक अपवाद मिलेगा।
आईएम केवल 200 स्तर की प्रोग्रामिंग कक्षा में। मैं फॉर्म नियंत्रणों को समझता हूं। लेकिन जिस वस्तु का मैं जिक्र कर रहा हूं वह एक वर्ग का उदाहरण है जिसे मैंने बनाया है। चूंकि ऑब्जेक्ट्स में कई मान हैं, इसलिए मैं थोड़ा उलझन में हूं कि अगर कोई भी बदलता है तो ट्रैक करने के लिए किसी ईवेंट को कैसे पंजीकृत किया जाए। – Sinaesthetic