बल

2009-11-27 14 views
6

के लिए फोर्स बनाएं हैंडल मैं वर्तमान में एक मूक प्रिंट मॉड्यूल बना रहा हूं। वर्तमान नियंत्रण मैं उपयोग कर रहा हूं, यह सुनिश्चित कर रहा है कि नियंत्रण हैंडल पहले से ही बनाई गई है (IsHandleCreated)। मैंने कुछ भी भाग्य के साथ इसे धोखा देने के लिए सबकुछ किया।बल

आप पर मन में विचार है कि कैसे मैं स्क्रीन में किसी भी प्रदर्शित किए बिना नियंत्रण के लिए एक संभाल बना सकते हैं है?

उत्तर

4

CreateParams संपत्ति गेटटर अधिभारित करने का प्रयास करें। इसमें WS_VISIBLE ध्वज साफ़ करें।

+1

मुझे यह पता चला। क्रेतेहैंडल(); वास्तव में अच्छी तरह से काम करता है (फॉर्म के भीतर से) – NewfrontSolutions

0

मैंने क्रिएशन पैराम्स के WS_VISIBLE सेटिंग्स द्वारा इस कष्टप्रद हैंडल निर्माण समस्या को हल किया। आप या तो CreationParams नियंत्रण की संपत्ति को ओवरराइड कर सकते हैं या CreateHandle विधि को उपयुक्त CreateParams इंस्टेंस के साथ कॉल कर सकते हैं। link

19

आपको हैंडल संपत्ति (एक डमी चर या कुछ में परिणाम डालें) को एक्सेस करना होगा। परावर्तक में देखो; यह सृजन निर्माण को मजबूर करता है।

+0

हा, यह काम करता है। अच्छा सुझाव! –

+0

धन्यवाद! यही कारण है कि आकर्षण की तरह काम करता :) – Mnyikka

2

मैं कुछ अन्य नियंत्रणों के साथ एक ही समस्या थी और Control.CreateControl() विधि का इस्तेमाल किया:

private void CheckForExistingHandle(Control control) 
{ 
    if (!control.IsHandleCreated) 
     control.CreateControl(); 
} 

लेकिन मैं नहीं जानता कि यह कैसे एक प्रिंट मॉड्यूल के साथ काम करता है।

+5

सुनिश्चित करें कि नियंत्रण की दृश्यमान संपत्ति सही पर सेट किया जाता है, या हैंडल नहीं बनाया जाएगा एक 'CreateControl()' कॉल से। अधिक जानकारियां के लिए http://msdn.microsoft.com/en-us/library/system.windows.forms.control.createhandle%28v=VS.90%29.aspx देखें। – Drahakar

+0

@Drahakar कि एक बहुत अच्छा टिप्पणी है: 'CreateControl' नियंत्रण बनाने के लिए नहीं चुन सकते हैं। एमएसडीएन पर उल्लिखित कार्यवाही 'हैन्डल' संपत्ति तक पहुंचना है –

0

कॉलिंग निजी विधि CreateHandle काम करेंगे।

MethodInfo ch = frm.GetType().GetMethod("CreateHandle", BindingFlags.NonPublic | BindingFlags.Instance); 
ch.Invoke(frm, new object[0]); 
संबंधित मुद्दे