2012-11-04 14 views
5

हाय मैंने कम्बोबॉक्स नियंत्रण की फ्लैटस्टाइल को फ्लैट पर सेट किया है।कम्बोबॉक्स सीमावर्ती

क्या इस नियंत्रण के आसपास सीमा खींचना संभव है?

नियंत्रण में सीमावर्ती संपत्ति नहीं है। किसी भी सुझाव की सराहना की जाएगी। साइड नोट: यदि संभव हो तो मैं फ्लैटस्टाइल फ्लैट रखना चाहता हूं।

+2

नियंत्रण के माता-पिता अपने पेंट इवेंट हैंडलर में इसके चारों ओर एक सीमा खींच सकते हैं। –

उत्तर

6

इसे पैनल में रखें, पैनल पर सीमा सेट करें, पैनल में सीएमबी बॉक्स रखें, सीएमबी बॉक्स को डॉक भरने के लिए सेट करें और सीमा शैली flat.simple लेकिन इतना सुरुचिपूर्ण समाधान नहीं है।

+0

यह मेरे उद्देश्यों के लिए इतना अधिक है! – p0enkie

13

कस्टम कॉम्बोबॉक्स नियंत्रण बनाएं, और इसे WndProc विधि ओवरराइड करें। आप आसानी से ControlPaint.DrawBorder विधि के साथ एक सीमा आकर्षित कर सकते हैं:

public class ComboBoxWithBorder : ComboBox 
{ 
    private Color _borderColor = Color.Black; 
    private ButtonBorderStyle _borderStyle = ButtonBorderStyle.Solid; 
    private static int WM_PAINT = 0x000F; 

    protected override void WndProc(ref Message m) 
    { 
     base.WndProc(ref m); 

     if (m.Msg == WM_PAINT) 
     { 
      Graphics g = Graphics.FromHwnd(Handle); 
      Rectangle bounds = new Rectangle(0, 0, Width, Height); 
      ControlPaint.DrawBorder(g, bounds, _borderColor, _borderStyle); 
     } 
    } 

    [Category("Appearance")] 
    public Color BorderColor 
    { 
     get { return _borderColor; } 
     set 
     { 
      _borderColor = value; 
      Invalidate(); // causes control to be redrawn 
     } 
    } 

    [Category("Appearance")] 
    public ButtonBorderStyle BorderStyle 
    { 
     get { return _borderStyle; } 
     set 
     { 
      _borderStyle = value; 
      Invalidate(); 
     } 
    }  
} 

BTW वहाँ भी ओवरलोड हो गया है DrawBorder विधि है, जो सीमा की चौड़ाई निर्धारित करने की अनुमति देता है। यदि आपको आवश्यकता हो तो इसका इस्तेमाल करें।

+1

क्या यह काम करता है? पेंट इवेंट में एक कॉम्बोबॉक्स सीमाओं को ओवरराइट नहीं किया जा सकता है। मुझे लगता है कि आपको WndProc को ओवरराइड करना होगा और गैर क्लाइंट पेंट संदेश की तलाश करना होगा। बेशक, तो यह बदसूरत बदसूरत। – LarsTech

+2

इसे पोस्ट करने से पहले कोड आज़माएं। –

+0

@ लार्सटेक आप सही हैं, मेरे खराब, निश्चित –