मैं थोड़ी देर के लिए कुछ इस तरह लागू करने के लिए इच्छुक के बाद इस पोस्ट भर में आया था। मैं नियमित रूप से राष्ट्रीय उपकरण से मापन स्टूडियो का उपयोग करता हूं, और उनके विनफॉर्म नियंत्रण करता है जिसमें ईवेंट स्टेट चेंजिंग या स्टेट चेंजेड एक्शनएवेंट आर्ट्स के पैरामीटर को पास करता है, जिसमें एक संपत्ति क्रिया होती है जो तीन मान ले सकती है: ByKeyboard, ByMouse और Programatic। यह निर्धारित करने में बहुत उपयोगी है कि नियंत्रण की स्थिति को बदलने के कारण क्या हुआ है। मैं इसे एक मानक WinForms चेकबॉक्स में दोहराना चाहता था।
public enum ControlSource
{
Programatic,
ByKeyboard,
ByMouse
}
public class AwareCheckBox : Checkbox
{
public AwareCheckBox()
: base()
{
this.MouseDown += AwareCheckbox_MouseDown;
this.KeyDown += AwareCheckbox_KeyDown;
}
private ControlSource controlSource = ControlSource.Programatic;
void AwareCheckbox_KeyDown(object sender, KeyEventArgs e)
{
controlSource = ControlSource.ByKeyboard;
}
void AwareCheckbox_MouseDown(object sender, MouseEventArgs e)
{
controlSource = ControlSource.ByMouse;
}
public new event AwareControlEventHandler CheckedChanged;
protected override void OnCheckedChanged(EventArgs e)
{
var handler = CheckedChanged;
if (handler != null)
handler(this, new AwareControlEventArgs(controlSource));
controlSource = ControlSource.Programatic;
}
}
public delegate void AwareControlEventHandler(object source, AwareControlEventArgs e);
public class AwareControlEventArgs : EventArgs
{
public ControlSource Source { get; private set; }
public AwareControlEventArgs(ControlSource s)
{
Source = s;
}
}
मुझे यकीन है कि वहाँ कई सुधार कर रहे हैं, लेकिन मेरी प्रारंभिक परीक्षण का प्रदर्शन किया है कि यह काम करता है:
यहाँ मेरी कोड है। मैंने यहां पोस्ट किया है अगर अन्य इस मुद्दे पर ठोकर खाएंगे और बदलाव की शुरुआत की गई थी, जहां अंतर की एक स्पष्ट तरीका चाहिए। कोई टिप्पणी स्वागत है।
यह सही तरीका है। तकनीकी रूप से आपको अंततः ब्लॉक में झूठ बोलना चाहिए। –