यह और भी सरल है, और शायद हैकी - जैसा कि मैं इस धागे पर जीडीआई की बहुत सारी मांसपेशियों को देख सकता हूं , और स्पष्ट रूप से केवल कुछ परिदृश्यों के लिए एक अच्छा फिट है। YMMV
मेरे परिदृश्य में, मैं "माता-पिता" UserControl के रूप में संदर्भित करता हूं कि मैं इसका उपयोग करता हूं - और Load
घटना के दौरान , मैं बस माता-पिता के .Controls
संग्रह से नियंत्रण-से-जोड़-तोड़ किया जा सकता हूं , और माता-पिता केOnPaint
बच्चे को पूरी तरह से चित्रित करने का ख्याल रखते हैं जो भी विशेष तरीके से नियंत्रण .. पूरी तरह से बच्चे की पेंट क्षमताओं को ऑफ़लाइन लेना।
अब, मैं अपने बच्चे की दिनचर्या को एक विस्तृत विधि के लिए सौंपता हूं, जो कि विंडोज़ के रूपों को प्रिंट करने के लिए माइक गोल्ड से इस अवधारणा पर आधारित है ।
यहां मुझे लेआउट के लंबवत रेंडर करने के लिए लेबलों के उप-सेट की आवश्यकता है :
फिर, मैं बच्चे को पेंट ParentUserControl.Load
हैंडलर में इस कोड के साथ पेंट करने से छूट देता हूं :
Private Sub ParentUserControl_Load(sender As Object, e As EventArgs) Handles MyBase.Load
SetStyle(ControlStyles.UserPaint, True)
SetStyle(ControlStyles.AllPaintingInWmPaint, True)
'exempt this control from standard painting:
Me.Controls.Remove(Me.HostedControlToBeRotated)
End Sub
फिर, एक ही ParentUserControl में, हम नियंत्रण-से-जोड़-तोड़ कर जमीन से ऊपर की ओर आते हैं:
Protected Overrides Sub OnPaint(e As PaintEventArgs)
'here, we will custom paint the HostedControlToBeRotated instance...
'twist rendering mode 90 counter clockwise, and shift rendering over to right-most end
e.Graphics.SmoothingMode = Drawing2D.SmoothingMode.AntiAlias
e.Graphics.TranslateTransform(Me.Width - Me.HostedControlToBeRotated.Height, Me.Height)
e.Graphics.RotateTransform(-90)
MyCompany.Forms.CustomGDI.DrawControlAndChildren(Me.HostedControlToBeRotated, e.Graphics)
e.Graphics.ResetTransform()
e.Graphics.Dispose()
GC.Collect()
End Sub
आप ParentUserControl कहीं की मेजबानी करने के बाद, उदाहरण के लिए एक Windows प्रपत्र - मैं खोजने कर रहा हूँ कि मेरी दृश्य स्टूडियो 2015 renders प्रपत्र सही ढंग से डिजाइन समय पर अच्छी तरह से क्रम के रूप में के रूप में:
अब, चूंकि मेरा विशेष हेरफेर बच्चे के नियंत्रण को 90 डिग्री तक घुमा देता है, मुझे यकीन है कि उस क्षेत्र में सभी हॉट स्पॉट और अन्तरक्रियाशीलता नष्ट हो गई है - लेकिन, मैं जो समस्या हल कर रहा था वह सभी एक पैकेज लेबल के लिए था जिसे पूर्वावलोकन और प्रिंट करने की आवश्यकता थी। जो मेरे लिए ठीक काम किया।
अगर मेरे उद्देश्यपूर्ण अनाथ नियंत्रण के लिए हॉट स्पॉट और कंट्रोल-नेस को फिर से लागू करने के तरीके हैं - मुझे उस दिन के बारे में सीखना अच्छा लगेगा (इस परिदृश्य के लिए नहीं, निश्चित रूप से, लेकिन .. बस सीखने के लिए)। बेशक, WPF ऐसे पागलपन OOTB का समर्थन करता है .. लेकिन .. हे .. WinForms अभी भी बहुत मज़ा है, अमीर?