दृश्य शैलियों के साथ कॉम्बोबॉक्स की तरह दिखने के लिए नियंत्रण कैसे प्रस्तुत करें?

मेरे पास एक नियंत्रण है जिसे कॉम्बोबॉक्स पर मॉडलिंग किया गया है। मैं नियंत्रण प्रस्तुत करना चाहता हूं ताकि नियंत्रण सीमा मानक विंडोज कॉम्बोबॉक्स जैसा दिखता हो। विशेष रूप से, मैंने एमएसडीएन दस्तावेज़ीकरण का पालन किया है और नियंत्रण की सभी प्रतिपादन नियंत्रण सही होने पर प्रतिपादन को छोड़कर सही है।

बस स्पष्ट होने के लिए, यह दृश्य शैलियों सक्षम वाले सिस्टम के लिए है। साथ ही, नियंत्रण के सभी हिस्सों को एक अक्षम नियंत्रण के चारों ओर सीमा को छोड़कर ठीक से प्रस्तुत किया जाता है, जो अक्षम कॉम्बोबॉक्स सीमा रंग से मेल नहीं खाता है।

मैं VisualStyleRenderer कक्षा का उपयोग कर रहा हूं। एमएसडीएन कॉम्बोबॉक्स नियंत्रण के टेक्स्टबॉक्स भाग के लिए VisualStyleElement.TextBox तत्व का उपयोग करने का सुझाव देता है लेकिन मानक अक्षम टेक्स्टबॉक्स और एक मानक अक्षम कॉम्बोबॉक्स थोड़ा अलग खींचता है (एक में हल्की भूरे रंग की सीमा होती है, दूसरी हल्की नीली सीमा होती है)।

अक्षम राज्य में नियंत्रण के सही प्रतिपादन को मैं कैसे प्राप्त कर सकता हूं?

0
जोड़ा संपादित
विचारों: 4

2 उत्तर

क्या ControlPaint विधियों में से कोई भी उपयोगी है इस? मैं आमतौर पर कस्टम-रेंडर नियंत्रणों के लिए उपयोग करता हूं।

0
जोड़ा

मैं 100% निश्चित नहीं हूं कि यह वही है जो आप खोज रहे हैं लेकिन आपको System.Windows.Forms.VisualStyles-Namepace में VisualStyleRenderer को देखना चाहिए।

  1. VisualStyleRenderer class (MSDN)
  2. How to: Render a Visual Style Element (MSDN)
  3. VisualStyleElement.ComboBox.DropDownButton.Disabled (MSDN)

चूंकि VisualStyleRenderer काम नहीं करेगा यदि उपयोगकर्ता के पास दृश्य शैली सक्षम नहीं है (वह हो सकता है कि वह 'क्लासिक मोड' या Windows XP से पहले एक ऑपरेटिव सिस्टम चला रहा हो) तो आपको हमेशा ControlPaint क्लास में फ़ॉलबैक होना चाहिए।

// Create the renderer.
if (VisualStyleInformation.IsSupportedByOS 
    && VisualStyleInformation.IsEnabledByUser) 
{
    renderer = new VisualStyleRenderer(
        VisualStyleElement.ComboBox.DropDownButton.Disabled);
}

और फिर ड्राइंग करते समय ऐसा करें:

if(renderer != null)
{
    // Use visual style renderer.
}
else
{
    // Use ControlPaint renderer.
}

आशा करता हूँ की ये काम करेगा!

0
जोड़ा