2008-09-16 19 views
12

सी # .NET में मैं समूह समूह में सीमा के रंग को प्रोग्रामेटिक रूप से बदलने की कोशिश कर रहा हूं।आप समूह बॉक्स पर सीमा का रंग कैसे बदलते हैं?

अपडेट: यह सवाल पूछा गया था कि जब मैं .NET पर स्विच करने से पहले Winforms सिस्टम पर काम कर रहा था।

+0

@ एमी चेक _user1944617_ उत्तर, यह वास्तव में स्वीकार करने के लिए वास्तव में अच्छा और बेहतर इमो है। डिफ़ॉल्ट समूह बॉक्स डिज़ाइन के साथ बस कोशिश की और पूरी तरह से फिट। – Drake

उत्तर

14

पिछले जवाब पर बिल्डिंग, एक बेहतर समाधान है कि समूह बॉक्स के लिए लेबल शामिल हैं:

groupBox1.Paint += PaintBorderlessGroupBox; 

private void PaintBorderlessGroupBox(object sender, PaintEventArgs p) 
{ 
    GroupBox box = (GroupBox)sender; 
    p.Graphics.Clear(SystemColors.Control); 
    p.Graphics.DrawString(box.Text, box.Font, Brushes.Black, 0, 0); 
} 

आप पाठ के लिए x/y समायोजित करने के लिए चाहते हो सकता है, लेकिन मेरे उपयोग के लिए यह सिर्फ सही है ।

+0

धन्यवाद @ मिक ब्रूनो, आपने मुझे कुछ गंभीर समय बचाया :) –

+1

Thx! सीमा को हटाने के लिए, जैसा कि मैंने किया था, 'box.Parent.BackColor' का उपयोग करें। – dwo

1

मुझे यकीन है कि यह हर मामले पर लागू होता है नहीं कर रहा हूँ, लेकिन यह धागा करने के लिए धन्यवाद, हम जल्दी से प्रोग्राम के रूप में उपयोग करते हुए पेंट घटना में झुका:

GroupBox box = new GroupBox(); 
[...] 
box.Paint += delegate(object o, PaintEventArgs p) 
{ 
    p.Graphics.Clear(someColorHere); 
}; 

चीयर्स!

5

बस सीमा बनाने के लिए इस विधि में किसी ऑब्जेक्ट (केवल बटन नहीं) पर पेंट एक्शन सेट करें।

private void UserControl1_Paint(object sender, PaintEventArgs e) 
    { 
     ControlPaint.DrawBorder(e.Graphics, this.ClientRectangle, Color.Red, ButtonBorderStyle.Solid); 

    } 

यह अभी भी मूल की तरह सुंदर और गोलाकार नहीं होगा, लेकिन यह बहुत आसान है।

24

बस पेंट इवेंट जोड़ें।

private void groupBox1_Paint(object sender, PaintEventArgs e) 
    { 
     GroupBox box = sender as GroupBox; 
     DrawGroupBox(box, e.Graphics, Color.Red, Color.Blue); 
    } 


    private void DrawGroupBox(GroupBox box, Graphics g, Color textColor, Color borderColor) 
    { 
     if (box != null) 
     { 
      Brush textBrush = new SolidBrush(textColor); 
      Brush borderBrush = new SolidBrush(borderColor); 
      Pen borderPen = new Pen(borderBrush); 
      SizeF strSize = g.MeasureString(box.Text, box.Font); 
      Rectangle rect = new Rectangle(box.ClientRectangle.X, 
              box.ClientRectangle.Y + (int)(strSize.Height/2), 
              box.ClientRectangle.Width - 1, 
              box.ClientRectangle.Height - (int)(strSize.Height/2) - 1); 

      // Clear text and border 
      g.Clear(this.BackColor); 

      // Draw text 
      g.DrawString(box.Text, box.Font, textBrush, box.Padding.Left, 0); 

      // Drawing Border 
      //Left 
      g.DrawLine(borderPen, rect.Location, new Point(rect.X, rect.Y + rect.Height)); 
      //Right 
      g.DrawLine(borderPen, new Point(rect.X + rect.Width, rect.Y), new Point(rect.X + rect.Width, rect.Y + rect.Height)); 
      //Bottom 
      g.DrawLine(borderPen, new Point(rect.X, rect.Y + rect.Height), new Point(rect.X + rect.Width, rect.Y + rect.Height)); 
      //Top1 
      g.DrawLine(borderPen, new Point(rect.X, rect.Y), new Point(rect.X + box.Padding.Left, rect.Y)); 
      //Top2 
      g.DrawLine(borderPen, new Point(rect.X + box.Padding.Left + (int)(strSize.Width), rect.Y), new Point(rect.X + rect.Width, rect.Y)); 
     } 
    } 
+0

सीमा पार करने और आयताकार के चारों ओर मोटाई करने का कोई तरीका है? –

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