2011-08-04 12 views
7

मैं सी # में विंडोज फॉर्म का उपयोग कर रहा हूं।एक फॉर्म और प्रक्रिया बटन सक्रिय करें एक ही समय पर क्लिक करें?

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

नोट्स:

  • मैं एमडीआई उपयोग कर रहा था और वहाँ माता पिता के रूप बटन पर क्लिक कोई समस्या नहीं थे। लेकिन अब सर्वोपरि कई रूपों में स्वतंत्र रूप से तैरने वाले रूपों के रूप में है।
  • कार्यकर्ता के रूप में मालिक संपत्ति के रूप में मुख्य रूप है, इस तरह वे मुख्य रूप के शीर्ष पर रहते हैं।
  • जब मैं एक निष्क्रिय रूप के बटन पर क्लिक करता हूं, तो कोई भी माउसहोवर, माउसइंटर, माउसडाउन और न ही माउसअप आग। यह केवल मुख्य रूप की सक्रिय घटना है जो आग लगती है।
  • मुख्य रूप पर एक पेड़ दृश्य (एक टैबकंट्रोल के अंदर, एक विभाजन के अंदर, एक पैनल के अंदर) है। इसके आइटम पहले माउस क्लिक पर चुने जाते हैं, भले ही मुख्य रूप निष्क्रिय हो। मुझे लगता है कि सभी नियंत्रण बराबर नहीं हैं!

उत्तर

6

आपको जो करना है वह एक वर्ग है जो ToolStrip विरासत में रखता है और WndProc को संभालता है। यह करने का यह एक तरीका है। कुछ भी हैं।

protected override void WndProc(ref Message m) 
{ 
    // WM_MOUSEACTIVATE = 0x21 
    if (m.Msg == WM_MOUSEACTIVATE && this.CanFocus && !this.Focused) 
     this.Focus(); 
    base.WndProc(ref m); 
} 

मैं पिछले जगह मैं काम पर इस में भाग गया, मैं समाधान मैं के साथ आया था और अधिक उत्तरार्द्ध की तरह काम किया लगता है, लेकिन मैं डॉन:

private class MyToolStrip : ToolStrip 
{ 
    private const uint WM_LBUTTONDOWN = 0x201; 
    private const uint WM_LBUTTONUP = 0x202; 

    private static bool down = false; 

    protected override void WndProc(ref Message m) 
    { 
     if (m.Msg == WM_LBUTTONUP && !down) 
     { 
      m.Msg = (int)WM_LBUTTONDOWN; 
      base.WndProc(ref m); 
      m.Msg = (int)WM_LBUTTONUP; 
     } 

     if (m.Msg == WM_LBUTTONDOWN) down = true; 
     if (m.Msg == WM_LBUTTONUP) down = false; 
     base.WndProc(ref m); 
    } 
} 

मैं भी इस समाधान को देखा है मेरे द्वारा उपयोग किए गए सटीक कोड तक पहुंच नहीं है।

+2

में बनाया मैं दूसरा समाधान का उपयोग कर रहा काम कर रहा था और यह बहुत अच्छा काम करता है। धन्यवाद! –

+0

बस एक नोट, यह आधार होना चाहिए। डंडप्रोक (रेफरी एम); –

+0

क्षमा करें, मैंने वीबी से एक को स्वत: परिवर्तित कर दिया। मैं इसे ठीक कर दूंगा। – dwidel

-4

यदि u सीमाओं के बिना फार्म है, इसलिए इस तर्क के लिए आप :)

form.FormBorderStyle = FormBorderStyle.None 
+4

आपके उत्तर में प्रश्न के साथ कुछ भी नहीं लगता है। – LarsTech

संबंधित मुद्दे