क्या सी # में विंडोज फॉर्म TextBox
की पृष्ठभूमि छवि को बदलना संभव है? BackgroundImage
संपत्ति नहीं है। क्या मुझे किसी भी तरह Paint
विधि ओवरराइड करना चाहिए?क्या एक पृष्ठभूमि छवि Winforms TextBox पर सेट की जा सकती है?
उत्तर
यह संभव नहीं है। यदि आप टेक्स्टबॉक्स को ओवरराइड करके और कन्स्ट्रक्शन में SetStyle (ControlStyles.UserPaint, true) को कॉल करके आज़माते हैं तो आप ऑनपेंटबैकग्राउंड को ओवरराइड कर सकते हैं और छवि खींच सकते हैं, आप कई कठोर आश्चर्यों के लिए होंगे। विरासत प्रतिपादन मोड में वापस गिरना उनमें से एक है।
टेक्स्टबॉक्स दिनांक विंडोज के शुरुआती दिनों से है, जब इसे अभी भी 386SUX हार्डवेयर पर चलाना था। इस तरह के सीमित हार्डवेयर पर उचित रूप से काम करने के लिए एक विशेष अपराध WM_PAINT ईवेंट का उपयोग किये बिना खुद को आकर्षित करना था। यह पृष्ठभूमि छवि को नष्ट कर देता है।
CodeProject.com पर एक प्रोजेक्ट है जो एक प्रदान करता है। मैं इसकी सिफारिश नहीं कर सकता।
संक्षिप्त और बहुत ही जानकारीपूर्ण उत्तर के लिए धन्यवाद। क्या आप कुछ कामकाज जानते हैं, यानी पारदर्शी पृष्ठभूमि? –
वर्कअराउंड: पृष्ठभूमि छवि के साथ 'UserControl' बनाएं। इसके ऊपर एक पारदर्शी 'RichTextBox' रखें। पारदर्शी 'रिचटेक्स्टबॉक्स' का उत्पादन करने के लिए, कॉपी करें [हंस पासेंट कोड] (http://stackoverflow.com/questions/605920/reasons-for-why-a-winforms-label-does-not-want-to-be-transparent/608256 # 608256) लेकिन 'लेबल' के बजाय 'RichTextBox' से प्राप्त होता है। ध्यान दें कि 'टेक्स्टबॉक्स' से विरासत में इस चाल के लिए काम नहीं करेगा। आप एक 'रिचटेक्स्टबॉक्स' को एक पृष्ठभूमि छवि को क्लीनर तरीके से देने में सक्षम हो सकते हैं; यह 'टेक्स्टबॉक्स' से अधिक शक्तिशाली नियंत्रण है। – Brian
आप कुछ देशी कोडिंग करने वाले हैं, तो आप तकनीक यहाँ उल्लेख उपयोग करने के लिए कोशिश कर सकते:
http://www.codedblog.com/2007/09/17/owner-drawing-a-windowsforms-textbox
(संपादित करें: मूल लिंक नीचे है, Zyo thnx, वेबैक मशीन में संग्रहित प्रति के लिए लिंक के साथ बदल दिया ।)
हालांकि लेख में के बाद टेक्स्टबॉक्स खींचा गया है (पहले नहीं), शायद इसे आपको जो चाहिए उसे पूरा करने के लिए संशोधित किया जा सकता है।
WinForms या WPF? – Vlad
WinForms, अद्यतन पोस्ट, धन्यवाद –