मेरे पास एक सी # फॉर्म है (चलिए इसे मेनफॉर्म कहते हैं) इसके साथ कई कस्टम नियंत्रण हैं। मैं मेनफॉर्म.ऑनक्लिक() विधि आग को किसी भी समय फॉर्म पर क्लिक करता हूं चाहे इस पर क्लिक किया गया हो या क्लिक पर कस्टम नियंत्रण में से एक पर क्लिक किया गया हो। मैं प्रमुख प्रेस के बजाए माउस क्लिक को छोड़कर फ़ॉर्म की कीप्रेव्यू सुविधा के समान व्यवहार की तलाश में हूं।मैं एक फॉर्म के लिए एक क्लिक इवेंट कैसे सेट करूं?
उत्तर
प्रपत्र के नियंत्रण में ईवेंट में, फॉर्म के क्लिक ईवेंट के पते के साथ, नियंत्रण में माउसक्लिक हैंडलर जोड़ें। मैंने इसका परीक्षण नहीं किया है, लेकिन यह काम कर सकता है।
Private Sub Example_ControlAdded(ByVal sender As Object, ByVal e As System.Windows.Forms.ControlEventArgs) Handles Me.ControlAdded
AddHandler e.Control.MouseClick, AddressOf Example_MouseClick
End Sub
Private Sub Example_MouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseClick
MessageBox.Show("Click")
End Sub
फ़ॉर्म पर खुली जगह पर क्लिक को पकड़ना आसान है, लेकिन वास्तव में एक नियंत्रण पर क्लिक करने के लिए, आपको उस नियंत्रण को उस फ़ॉर्म को भेजने के लिए आवश्यकता होगी।
एक संभावना है कि पूरे फॉर्म पर एक पारदर्शी नियंत्रण रखें, और उस पर क्लिक स्वीकार करें, उनके साथ सौदा करें, और फिर उन्हें नीचे उचित नियंत्रण में पास करें।
मुझे लगता है कि इससे कहीं अधिक सुरुचिपूर्ण समाधान होना चाहिए। – Mykroft
यह विकास में एक आम पैटर्न है, इसे ऑब्जर्वर पैटर्न कहा जाता है। ऑब्जर्वर पैटर्न के बहुत सारे उदाहरण हैं और सी # यहां 1 उदाहरण http://msdn.microsoft.com/en-us/library/ms954621.aspx है लेकिन इसके पास एक अच्छा Google है।
एकमात्र तरीका मैंने कभी ऐसा करने में कामयाब रहा है [सी] क्लिक [/ c] प्रत्येक नियंत्रण की घटना को संभालने के लिए। मुझे विश्वास नहीं है कि नियंत्रण प्रक्रियाओं से पहले घटना को उठाया गया है।
डब्ल्यूपीएफ में, "सुरंग" पूर्वावलोकन घटनाएं हैं जो इस कार्यक्षमता प्रदान करती हैं, लेकिन यह वास्तव में WinForms में आपकी सहायता नहीं करती है।
वैसे अब डब्लूपीएफ पर स्विच करने में बहुत देर हो चुकी है, लेकिन मुझे लगता है कि मुझे भविष्य में इसका उपयोग करने पर गंभीरता से विचार करना होगा। – Mykroft
यदि आप चाहें तो आप सभी नियंत्रण की घटनाओं को हुक कर सकते हैं और फिर उस तरह की निगरानी कर सकते हैं। मुझे लगता है कि उन सभी को फंसाने के लिए कुछ उबर फैंसी Win32 एपीआई तरीका है, लेकिन यह इस समय मेरे बाहर है।
14:51:42.3381985 MouseClick (Form1)
14:51:40.6194485 MouseClick (RichTextBox)
14:51:40.0100735 MouseClick (TextBox)
14:51:39.6194485 MouseClick (Form1)
14:51:39.2131985 MouseClick (RichTextBox)
14:51:38.8694485 MouseClick (Button)
HTH:
public Form1()
{
InitializeComponent();
HookEvents();
}
private void HookEvents() {
foreach (Control ctl in this.Controls) {
ctl.MouseClick += new MouseEventHandler(Form1_MouseClick);
}
}
void Form1_MouseClick(object sender, MouseEventArgs e)
{
LogEvent(sender, "MouseClick");
}
// and then this just logs to a multiline textbox you have somwhere on the form
private void LogEvent(object sender, string msg) {
this.textBox1.Text = string.Format("{0} {1} ({2}) \n {3}",
DateTime.Now.TimeOfDay.ToString(),
msg,
sender.GetType().Name,
textBox1.Text
);
}
उत्पादन कुछ इस तरह, सभी घटनाओं और जो उन्हें "भेजा" को दिखा रहा है।
मैं आपके आवेदन के अन्य रूपों के उत्तराधिकारी के लिए आधार फॉर्म बनाने की अनुशंसा करता हूं। GlobalMouseClickEventHandler नामक एक नई घटना बनाने के लिए अपने आधार फार्म के लिए इस कोड जोड़ें:
namespace Temp
{
public delegate void GlobalMouseClickEventHander(object sender, MouseEventArgs e);
public partial class TestForm : Form
{
[Category("Action")]
[Description("Fires when any control on the form is clicked.")]
public event GlobalMouseClickEventHander GlobalMouseClick;
public TestForm()
{
InitializeComponent();
BindControlMouseClicks(this);
}
private void BindControlMouseClicks(Control con)
{
con.MouseClick += delegate(object sender, MouseEventArgs e)
{
TriggerMouseClicked(sender, e);
};
// bind to controls already added
foreach (Control i in con.Controls)
{
BindControlMouseClicks(i);
}
// bind to controls added in the future
con.ControlAdded += delegate(object sender, ControlEventArgs e)
{
BindControlMouseClicks(e.Control);
};
}
private void TriggerMouseClicked(object sender, MouseEventArgs e)
{
if (GlobalMouseClick != null)
{
GlobalMouseClick(sender, e);
}
}
}
}
यह समाधान न केवल शीर्ष स्तर के नियंत्रण के लिए काम करेंगे, लेकिन भी इस तरह के पैनल के अंदर रखा नियंत्रण के रूप में नियंत्रण नेस्ट।
धन्यवाद एक टन! एक सरल और सुरुचिपूर्ण समाधान। आश्चर्य है कि माउस क्लिक के लिए 'KeyPreview' के बराबर कुछ क्यों नहीं है –
- 1. मैं एक WinForm फॉर्म के मालिक के रूप में एक उग्र संवाद कैसे सेट करूं?
- 2. मैं एंटर कुंजी के साथ फॉर्म सबमिट कैसे अक्षम करूं?
- 3. क्लिक इवेंट
- 4. डब्ल्यूपीएफ आयताकार में एक क्लिक इवेंट
- 5. डबल क्लिक हैंडल इवेंट
- 6. लॉगिन फॉर्म के लिंक के लिए मैं एक वापसी यूआरएल कैसे निर्दिष्ट करूं?
- 7. मैं jQuery async में एक फॉर्म कैसे सबमिट करूं?
- 8. मैं अपने स्प्रिंग 3/हाइबरनेट 4 लोकलेशंस फैक्ट्रीबीन के लिए इवेंट श्रोताओं को कैसे सेट करूं?
- 9. मैं एक क्लिक के माध्यम से ऑन क्लिक ईवेंट कैसे पास करूं?
- 10. मैं ढांचे के बिना एक एंकर पर क्लिक कैसे करूं (जावास्क्रिप्ट)
- 11. मैं एक फॉर्म सबमिट करने के बाद WWW :: मैकेनाइज के साथ एक फ़ाइल कैसे डाउनलोड करूं?
- 12. मैं इस संदर्भ को इवेंट हैंडलर में कैसे पास करूं?
- 13. मैं बटन दबाए गए राज्य के लिए एक अलग रंग कैसे सेट करूं?
- 14. मैं एक वर्कशीट में एक ही क्लिक के साथ सभी वर्कशीट की रक्षा कैसे करूं?
- 15. मैं पेंट इवेंट कैसे कॉल करूं?
- 16. मैं एक App.Config फ़ाइल से CultureInfo.CurrentCulture कैसे सेट करूं?
- 17. मैं एक क्लिकऑन परिदृश्य में AppDomain FriendlyName कैसे सेट करूं?
- 18. एक Django फॉर्म इनपुट फ़ील्ड में इवेंट हैंडलर कैसे सेट करें
- 19. मैं पर्ल में बाधाओं का एक सेट कैसे हल करूं?
- 20. मैं एक HTML फ्रेम का पृष्ठभूमि रंग कैसे सेट करूं?
- 21. मैं एक jQuery UI संवाद पर रोकथाम कैसे सेट करूं?
- 22. मैं एक GtkTextView का पाठ कैसे सेट करूं?
- 23. मैं मार्कडाउन में एक HTML क्लास विशेषता कैसे सेट करूं?
- 24. मैं बूटस्ट्रैप में ScrollSpy के लिए ऑफ़सेट कैसे सेट करूं?
- 25. आईई ग्रेडिएंट फ़िल्टर क्लिक इवेंट
- 26. मैं एक RedirectToAction के साथ एक मॉडल कैसे शामिल करूं?
- 27. बैकबोन क्लिक इवेंट मॉडल
- 28. मैं कुछ के लिए एक छवि कैसे सेट करूं लेकिन TreeView में सभी नोड्स कैसे नहीं?
- 29. JQuery accordion - अनइंड क्लिक इवेंट
- 30. आईपैड जावास्क्रिप्ट क्लिक इवेंट
यह अभी भी एक हैक का थोड़ा सा प्रतीत होता है लेकिन यह मेरे पास सबसे अच्छा विकल्प प्रतीत होता है। – Mykroft