2012-11-16 35 views
6

मैं विंडोज फॉर्म ऐप (सी #, .NET 4.0, वीएस 2010) पर काम कर रहा हूं, जहां मेरे पास टूलस्ट्रिप (ग्रिप स्टाइल: हिडन, डॉक: टॉप, रेंडरमोड: मैनेजर रेन्डरमोड) के साथ एक सुंदर मानक मेनफॉर्म है। टूलस्ट्रिप में कुछ मूलभूत वस्तुएं हैं (टूलस्ट्रिप लेबल, टूलस्ट्रिपसेपरेटर, टूलस्ट्रिपस्प्लिट बटन)।टूलस्ट्रिप गोलाकार कॉर्नर

यह इस प्रकार दिया जाता है:

ToolStrip rendered by default ManagerRenderMode

पहले तो मैं बस toolstrip नीचे एक निम्नतम सीमा जोड़ना चाहते थे, लेकिन मैं यह भी देखा कि इस toolstrip प्रदान की गई है के साथ 'कोने गोल' (आप छवि में दाईं ओर वाले शीर्ष और नीचे वाले लोगों को देख सकते हैं), और एक लंबवत ढाल रेखा।

मैं इन कोनों को गोल नहीं कर सकता हूं?

मैंने कोशिश की:

public class MainFormToolStripRenderer : ToolStripProfessionalRenderer 
{ 
    protected override void OnRenderToolStripBorder(ToolStripRenderEventArgs e) 
    { 
     base.OnRenderToolStripBorder(e); 

     var y = e.ToolStrip.Height-1; 
     e.Graphics.DrawLine(new Pen(SystemColors.ControlDark, 1), new Point(0, y), new Point(e.ToolStrip.Width, y)); 
    } 

और मेरे प्रपत्र प्रारंभ में this.toolStrip_Actions.Renderer=new MainFormToolStripRenderer(); के माध्यम से इसे वायर्ड।

इसने मुझे नीचे सीमा दी, लेकिन गोलाकार कोनों के लिए कुछ भी नहीं किया। इसके अलावा, जोड़ा नीचे की सीमा के साथ, गोलाकार कोनों अधिक ध्यान देने योग्य हैं:

ToolStrip rendered by custom ToolStripProfessionalRenderer

अगला मैं ऊपर ही ईवेंट हैंडलर के दौरान और आयत बनाकर, कोशिश करने के लिए (कम से कम) गोल किनारों और ऊर्ध्वाधर छिपाने की कोशिश की एक ठोस आयताकार सीमा के पीछे ढाल। यह काम नहीं करता क्योंकि उपलब्ध ड्राइंग क्षेत्र (ई। एफेक्टेड बाउंड) गोलाकार सीमाओं के भीतर है।

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

मुझे लगता है कि मैं अंत में प्रबंधित करता हूं, मैं प्रबंधितरेंडेड मोड के साथ रहना चाहता हूं, या व्यावसायिक एक से प्राप्त एक कस्टम रेंडरर - लेकिन मुझे गोलाकार कोनों से छुटकारा पाने की आवश्यकता है। अन्य लोगों के बीच, मुझे this SO Q मिल गया जो कि मैं जो देख रहा हूं उसके करीब इंगित करता है लेकिन मुझे मेरे मामले का जवाब नहीं दिया।

अग्रिम धन्यवाद

+1

विनफॉर्म पूरी तरह से अपना नियंत्रण बनाये बिना कुछ अलग करने के लिए एक दर्द है। अब बहुत देर हो सकती है, लेकिन क्या आपने डब्ल्यूपीएफ/एक्सएएमएल के साथ गड़बड़ की है? – iMortalitySX

+0

धन्यवाद, लेकिन हमने पहले डब्लूपीएफ को देखा और अभी के लिए हम "मूल" विनफॉर्म के साथ चिपकने की कोशिश कर रहे हैं। मुझे मानक टूलस्ट्रिप से विरासत में कोई दिक्कत नहीं है, अगर मुझे कुछ विवरणों को ओवरराइड करने की ज़रूरत है, लेकिन हाँ: यह अच्छी बात होगी कि पूरी चीज को अपने आप में प्रस्तुत न करें (विशेष रूप से स्प्लिटबटन के साथ हमें इसके अंदर की जरूरत है, इत्यादि।) – FOR

उत्तर

9

अपने रेंडरर कक्षा में इस प्रयास करें:

public class MainFormToolStripRenderer : ToolStripProfessionalRenderer { 

    public MainFormToolStripRenderer() { 
    this.RoundedEdges = false; 
    } 
} 
+0

कमाल! धन्यवाद (मैं वास्तव में RoundedEdges संपत्ति को अपने कस्टम प्रस्तुतकर्ता में झूठी करने के लिए सेट करता हूं, लेकिन वह चाल थी)! अभी भी कुछ परेशानी है क्योंकि अब कोनों को गोलाकार नहीं किया गया है, विभाजन बटन बंद कर दिया गया है ... लेकिन मैं आपका जवाब स्वीकार करूंगा क्योंकि यह प्राथमिक मुद्दा हल करता है और मुझे सही रास्ते पर रखता है। – FOR

+2

असल में, टूलस्ट्रिप गुणों में एक रेंडरमोड विकल्प है जिसमें 3 विकल्प हैं: सिस्टम, प्रोफेशनल और मैनेजर रेन्डरमोड। पहला विकल्प ओएस को टूलस्ट्रिप प्रस्तुत करने देता है जो गोल नहीं है, और अंतिम दो गोलाकार है – am05mhz

2

उल्लेख am05mhz के रूप में, बस RenderMode> सिस्टम और गोलाकार कोनों गायब हो जाते हैं का चयन करें:

0

accepted answer परपर बिल्डिंग 10, आपको एक नई रेंडरर कक्षा को लागू करने की आवश्यकता नहीं है, जब तक ऐसा करने के लिए अनिवार्य कारण न हों।

आप इस प्रकार एक एक लाइनर के रूप में यह कर सकते हैं:

toolStrip_Actions.Renderer = new ToolStripProfessionalRenderer() { RoundedEdges = false }; 

या RenderMode ManagerRenderMode करने के लिए सेट के साथ एक ToolStrip के लिए डिफ़ॉल्ट रेंडरर के बाद से पहले से ही एक ToolStripProfessionalRenderer है, आप इस तरह के रूप में यह डाली और RoundedEdges तक पहुंच सकते हैं संपत्ति निम्नानुसार है:

((ToolStripProfessionalRenderer)toolStrip_Actions.Renderer).RoundedEdges = false;