.NET टेक्स्टबॉक्स के लिए माउसडाउन ईवेंट कैप्चर करें

क्या .NET 2.0 टेक्स्टबॉक्स नियंत्रण से माउसडाउन को कैप्चर करने का कोई तरीका है? मुझे पता है कि विरासत में नियंत्रण कक्षा में कार्यक्रम है, लेकिन यह टेक्स्टबॉक्स में खुलासा नहीं है। घटना हैंडलर को ओवरराइड करने का कोई तरीका है?

मैंने OpenNETCF TextBox2 नियंत्रण की भी कोशिश की जिसमें माउसडाउन ईवेंट का खुलासा हुआ, लेकिन इससे कोई फर्क नहीं पड़ता कि यह हैडलर को आग नहीं देता है।

कोई सुझाव?


किस प्रकार का पागल मोबाइल डिवाइस करता है   आपके पास माउस है? :)

हां, विंडोज़ मोबाइल में वास्तविक माउस नहीं है, लेकिन आप गलत हैं कि विंडोज मोबाइल .NET माउस इवेंट्स का समर्थन नहीं करता है। स्क्रीन पर एक क्लिक या चाल अभी भी एक "माउस" घटना माना जाता है। यह इस तरह से किया गया था ताकि कोड आसानी से पूर्ण विंडोज से बंद हो सके। और यह एक विंडोज मोबाइल विशिष्ट मुद्दा नहीं है। विंडोज़ पर टेक्स्टबॉक्स नियंत्रण में देशी माउस ईवेंट नहीं हैं। मैं बस इस मामले में विंडोज मोबाइल का उपयोग कर रहा था।

संपादित करें: और एक तरफ ध्यान दें ... क्योंकि विंडोज मोबाइल विंडोजसीई कोर का निर्माण होता है जिसे अक्सर एम्बेडेड डेस्कटॉप सिस्टम और स्लिम टर्मिनल सर्विसेज क्लाइंट या "विनटर्म" के लिए उपयोग किया जाता है, इसका हार्डवेयर हार्डवेयर के लिए समर्थन होता है और लंबे समय तक होता है। अधिकांश उपकरणों में बंदरगाहों को प्लग इन करने के लिए नहीं होते हैं।


नेट फ्रेमवर्क के अनुसार,   टेक्स्टबॉक्स पर माउसडाउन इवेंट हैंडलर   समर्थित है। क्या होता है जब आप   कोड चलाने की कोशिश करें?

असल में, यह केवल इसलिए है क्योंकि इसे "नियंत्रण" से प्राप्त होता है, जैसा कि प्रत्येक अन्य फ़ॉर्म नियंत्रण करता है। हालांकि, टेक्स्टबॉक्स श्रेणी में यह ओवरराइड (और निजी तौर पर मेरा विश्वास है)। तो यह विजुअल स्टूडियो में इंटेलिसेन्स में दिखाई नहीं देगा।

हालांकि, आप वास्तव में कोड लिख सकते हैं:

textBox1.MouseDown += new System.Windows.Forms.MouseEventHandler(this.textBox1_MouseDown);

और यह संकलित और ठीक से चलाएगा, केवल समस्या यह है कि जब आप टेक्स्टबॉक्स नियंत्रण टैप करते हैं तो textBox1_MouseDown() को निकाल दिया नहीं जाएगा। मुझे लगता है कि यह घटना आंतरिक रूप से ओवरराइड होने की वजह से है। मैं आंतरिक रूप से घटना पर क्या हो रहा है, यह भी बदलना नहीं चाहता हूं, मैं बस उस घटना में अपना खुद का इवेंट हैंडलर जोड़ना चाहता हूं ताकि मैं किसी भी अन्य घटना के साथ कुछ कस्टम कोड को आग लगा सकूं।

0
ro fr bn
आपके पास किस तरह का पागल मोबाइल डिवाइस है जिसमें माउस है? :) गंभीरता से, कोई माउसडाउन ईवेंट नहीं है क्योंकि विंडोज मोबाइल में माउस नहीं है। आप माउसडाउन इवेंट हैंडलर में क्या करने की कोशिश कर रहे हैं? शायद एक और तरीका है।
जोड़ा लेखक ageektrapped, स्रोत

5 उत्तर

According to the .Net Framework, the MouseDown Event Handler on a TextBox is supported. What happens when you try to run the code?

0
जोड़ा

काफी उचित। आप शायद विंडोज मोबाइल के बारे में मुझसे ज्यादा जानते हैं। :) मैंने अभी इसके लिए प्रोग्रामिंग शुरू कर दी है। लेकिन नियमित WinForms में, आप अपने इच्छित ऑनएक्सxx ईवेंट हैंडलर विधियों को ओवरराइड कर सकते हैं। सीएफ के साथ परावर्तक में एक त्वरित रूप से पता चलता है कि नियंत्रण, टेक्स्टबॉक्स बॉक्स और टेक्स्टबॉक्स आपको ऑनमोउसडाउन ईवेंट हैंडलर को ओवरराइड करने से नहीं रोकता है।

क्या आपने यह कोशिश की है ?:

public class MyTextBox : TextBox
{
    public MyTextBox()
    {
    }

    protected override void OnMouseDown(MouseEventArgs e)
    {
        //do something specific here
        base.OnMouseDown(e);
    }
}
0
जोड़ा

ऐसा लगता है कि आप सही हैं। ओह। कोई माउस ओवर घटना नहीं।

हालांकि, .NET के साथ हमेशा काम करने वाली फॉलबैक में से एक पी/आमंत्रण है। किसी ने पहले ही .NET CF TextBox के लिए ऐसा करने का समय लिया है। मैंने इसे कोडप्रोजेक्ट पर पाया:

http://www.codeproject.com/KB/cs/TextBox_subclassing.aspx

उम्मीद है की यह मदद करेगा

0
जोड़ा

मुझे पता है कि यह जवाब देर से है, लेकिन उम्मीद है कि यह किसी ऐसे व्यक्ति के लिए उपयोगी होगा जो इसे पाता है। इसके अलावा, मैं पूरी तरह से अपने साथ नहीं आया था। मेरा मानना ​​है कि मुझे मूल रूप से ओपनएनईटीसीएफ बोर्डों की अधिकांश जानकारी मिली, लेकिन नीचे दिए गए टाइप को मेरे अनुप्रयोगों में से एक से निकाला गया है।

आप OpenNETCF.Windows.Forms.IMessageFilter इंटरफ़ेस को कार्यान्वित करके और अपने एप्लिकेशन के संदेश फ़िल्टर को अटैच करके एक मूसडाउन ईवेंट प्राप्त कर सकते हैं।

static class Program {
    public static MouseUpDownFilter mudFilter = new MouseUpDownfilter();
    public static void Main() {
        Application2.AddMessageFilter(mudFilter);
        Application2.Run(new MainForm());
    }
}

इस तरह आप MouseUpDownFilter को कार्यान्वित कर सकते हैं:

public class MouseUpDownFilter : IMessageFilter {
    List ControlList = new List();

    public void WatchControl(Control buttonToWatch) {
        ControlList.Add(buttonToWatch);
    }

    public event MouseEventHandler MouseUp;
    public event MouseEventHandler MouseDown;

    public bool PreFilterMessage(ref Microsoft.WindowsCE.Forms.Message m) {
        const int WM_LBUTTONDOWN = 0x0201;
        const int WM_LBUTTONUP = 0x0202;

       //If the message code isn't one of the ones we're interested in
       //then we can stop here
        if (m.Msg != WM_LBUTTONDOWN && m.Msg != WM_LBUTTONDOWN) {
            return false;
        }

       // see if the control is a watched button
        foreach (Control c in ControlList) {
            if (m.HWnd == c.Handle) {
                int i = (int)m.LParam;
                int x = i & 0xFFFF;
                int y = (i >> 16) & 0xFFFF;
                MouseEventArgs args = new MouseEventArgs(MouseButtons.Left, 1, x, y, 0);

                if (m.Msg == WM_LBUTTONDOWN)
                    MouseDown(c, args);
                else
                    MouseUp(c, args);

               //returning true means we've processed this message
                return true;
            }
        }
        return false;
    }
}

अब यह MouseUpDownFilter एक माउसअप/माउसडाउन ईवेंट को तब देखेगा जब वे देखे गए नियंत्रण पर हों, उदाहरण के लिए आपका टेक्स्टबॉक्स। इस फ़िल्टर का उपयोग करने के लिए आप कुछ देखे गए नियंत्रण जोड़ते हैं और उन ईवेंट को असाइन करते हैं जो आपके फॉर्म के लोड ईवेंट में आग लग सकते हैं:

private void MainForm_Load(object sender, EventArgs e) {
    Program.mudFilter.WatchControl(this.textBox1);
    Program.mudFilter.MouseDown += new MouseEventHandler(mudFilter_MouseDown);
    Program.mudFilter.MouseUp += new MouseEventHandler(mudFilter_MouseUp);
}

void mudFilter_MouseDown(object sender, MouseEventArgs e) {
    if (sender == textBox1) {
       //do what you want to do in the textBox1 mouse down event :)
    }

}

0
जोड़ा

क्या वहां एक 'ऑनइंटर' घटना है जिसे आप इसके बजाय कैप्चर कर सकते हैं?

जब आप टेक्स्टबॉक्स में टैब करते हैं और उस पर टैप करके टेक्स्ट बॉक्स दर्ज करते हैं, तो संभवतः यह भी कैप्चर होगा, लेकिन यदि यह कोई समस्या नहीं है, तो यह एक और अधिक सरल काम हो सकता है

0
जोड़ा