2009-04-15 32 views
6

नहीं है, मैं आकार बदलने के लिए Windows फॉर्म पर UserControl (जिस पर ग्रिड है) प्राप्त करने का प्रयास कर रहा हूं। नीचे कोड मेरे पास फॉर्म में है। मुझे जो व्यवहार मिल रहा है वह यह है कि जब मैं इसे बड़ा करता हूं तो नियंत्रण का आकार बदल जाता है। लेकिन यह संकोच नहीं करता है। मैं गलत क्या कर रहा हूं (या) मुझे क्या याद आ रही है?अभिव्यक्ति को संशोधित नहीं कर सकता क्योंकि यह एक चर

//Resize the grid that the UserControl has on it 
private void NameValuePropertyBag_Resize(object sender, EventArgs e) 
{ 
    grdNameValueProperties.Location = new Point(4,4); 
    grdNameValueProperties.Size = new Size(this.Width - 8, this.Height - 8); 
} 

मैं

grdNameValueProperties.Size.Width = this.Width - 8; 
grdNameValueProperties.Size.Height = this.Height -8; 

यह मुझे "अभिव्यक्ति संशोधित नहीं कर सकते, क्योंकि यह एक चर नहीं है" त्रुटि दिखाता है की कोशिश की:

private void AdjustGrid() 
{ 
    ZoomControl.Location = new Point(5, 5); 
    ZoomControl.Size = new Size(this.Width - 15, this.Height - 75); 
} 

void zoomform_Resize(object sender, EventArgs e) 
{ 
    AdjustGrid(); 
} 

अब उपयोगकर्ता नियंत्रण निम्नलिखित कोड है। .. मैं क्या खो रहा हूँ?

अतिरिक्त जानकारी:

मैं SetParent उपयोग कर रहा हूँ() विंडोज के लिए कदम/एक और फॉर्म (ZoomForm) के लिए एक UserControl ज़ूम करने के लिए कॉल। एंकर सेटपैरेंट() के साथ स्थानांतरित नियंत्रणों के लिए काम नहीं कर रहा है ... अधिक सटीक, यह काम कर रहा है लेकिन मुझे समस्याएं पुनर्जीवित कर रही हैं।

मैं रीपेंट मुद्दों के बिना काम करने के लिए एंकर/डॉक जोड़ी मिल गया [मैं आकार बदलने घटना wireup हटा दिया और डॉक समायोजित भरें करने के लिए]

ZoomForm initally कोई नियंत्रण नहीं है। उपयोगकर्ता नियंत्रण गतिशील रूप से पेरेंटफॉर्म में जोड़ा जाता है।

वर्तमान में, मैं ऊपर दिए गए कोड के साथ ज़ूम फॉर्म बड़ा बनाने में सक्षम हूं लेकिन छोटा नहीं है।

+0

आप आकार बदलने के बजाय कोड के बजाय एंकर गुणों का उपयोग क्यों नहीं करते? – recursive

+0

@recursive: मैं UserPontrol को किसी अन्य फॉर्म (ज़ूमफॉर्म) में स्थानांतरित/ज़ूम करने के लिए सेटपैरेंट() विंडोज कॉल का उपयोग कर रहा हूं। एंकर को SetParent() के साथ स्थानांतरित नियंत्रणों के लिए काम नहीं लगता है ... अधिक सटीक, यह काम कर रहा है लेकिन मुझे समस्याएं पुनर्जीवित कर रही हैं –

उत्तर

1

आप नहीं सीधे एक UserControl पर Size.Width संपत्ति,, बदल सकते हैं क्योंकि Size संपत्ति एक मान प्रकार है, इसलिए बदल रहा है इसकी चौड़ाई अनिवार्य रूप से पूरे Size संपत्ति को अधिलेखित किया जाएगा। इसके बजाय, WinForms में नियंत्रण के लिए अपने स्वयं चौड़ाई और ऊंचाई गुण प्रदान करते हैं तो यह कोड काम करना चाहिए:

grdNameValueProperties.Width = this.Width - 8; 
grdNameValueProperties.Height = this.Height - 8; 

कहा करने के बाद कि, मैं @ पुनरावर्ती की टिप्पणी से सहमत है कि आप शायद सिर्फ UserControl के Anchor संपत्ति का उपयोग करना चाहिए इसे बनाने के लिए " स्वचालित रूप से "आकार बदलें।

+0

@ मैट: धन्यवाद ... मैंने नए आकार() असाइनमेंट से छुटकारा पा लिया है। मुझे अभी भी एक ही समस्या है: मैं फॉर्म को बड़ा कर सकता हूं लेकिन छोटा नहीं :( –

+0

आप किस आकार का आयोजन कर रहे हैं? उपयोगकर्ता नियंत्रण किस पर नियंत्रण करता है? क्या आप इसके बजाय फॉर्म का आकार बदल सकते हैं? –

7
grdNameValueProperties.Size.Width = this.Width - 8; 
grdNameValueProperties.Size.Height = this.Height -8; 

वह कोड त्रुटि देता है क्योंकि आकार एक मान प्रकार है, संदर्भ प्रकार नहीं। यह http://www.yoda.arachsys.com/csharp/parameters.html पढ़ना मूल्य प्रकारों और संदर्भ प्रकारों के बीच अंतर को समझने में मदद कर सकता है।

4

जैसा कि रिकर्सिव टिप्पणी की गई है, आपको केवल एंकर संपत्ति का उपयोग करना चाहिए।

त्रुटि उत्पन्न होती है क्योंकि आकार संपत्ति एक संरचना का खुलासा करती है, न कि संदर्भ प्रकार। आकार संपत्ति नियंत्रण की आकार वस्तु की एक प्रति देता है। गुणों को लिखना इस प्रति की चौड़ाई और हाइट का कोई मतलब नहीं है क्योंकि यह केवल एक अस्थायी प्रति है और कहीं भी स्मृति द्वारा समर्थित नहीं है।

+0

@danbruc: यह पहली बार नहीं है जब मैं सूओ गूंगा रहा हूं। फिर भी रीफ्रेशर के लिए धन्यवाद :) –

0

पहले भाग के लिए -

सबसे पहले, मैं बजाय UserControl पर लंगर संपत्ति का उपयोग कर आकार को यह अपने आप कोशिश कर सलाह देते हैं।खिड़की के आकार बदलने के लिए यह बहुत ही सरल, और बहुत भरोसेमंद काम करता है।

यदि आप ऐसा करना चाहते हैं, तो आपको शायद इसे बंद करने के लिए देखना चाहिए। इसके बजाय क्लाइंटसाइज। हाइट और यह। विथ। आप शायद अपने नियंत्रण को बहुत बड़ा सेट कर रहे हैं, और वह उस पैनल या अन्य चीज़ को अनचाहे कर रहा है जिस पर आप बैठे हैं, जो सभी प्रकार के मुद्दों का कारण बनता है।

दूसरा भाग इस तथ्य के कारण है कि ग्रिडनाम वैल्यू गुण .ize। विथथ एक संरचना का सदस्य है।

जब आप ग्रिडनाम वैल्यूप्रॉपर्टीज कहते हैं। आकार, आप एक आकार संरचना लौट रहे हैं, फिर लौटाई गई संरचना (मूल नहीं) पर चौड़ाई सेट करने का प्रयास कर रहे हैं। यही कारण है कि आपको एक शॉट में पूरे आकार का वैल्यूटाइप सेट करने की आवश्यकता है। एक नया आकार() बनाना और इसे ग्रिडनाम वैल्यूप्रॉपर्टीज़ में सेट करना। यह काम करने का एकमात्र तरीका है।

+0

@Reed: आकार बदलता है। यदि मैं फॉर्म का आकार बदलता हूं (इसे बड़ा बना देता हूं) तो UserControl और उसके बच्चे के नियंत्रण बड़े हो जाते हैं। फॉर्म मुझे इसे छोटा बनाने की अनुमति नहीं देगा। –

+0

क्या आपके पास UserControl के अलावा आपके फॉर्म पर कुछ और है? यदि उपयोगकर्ता नियंत्रण में प्रपत्र में कोई अन्य कंटेनर है, और आपने उपयोगकर्ता नियंत्रण को एचटीई क्लाइंट क्षेत्र के लिए "बहुत बड़ा" सेट किया है, तो मैंने यह व्यवहार देखा है। यही कारण है कि मैंने क्लाइंटसाइज में बदलने का सुझाव दिया। –

1

वर्तमान में, मैं ज़ूम फॉर्म को उपरोक्त कोड के साथ बड़ा बनाने में सक्षम हूं लेकिन छोटा नहीं।

कुछ नियंत्रणों पर उनके पास न्यूनतम आकार (या समान) संपत्ति होती है। क्या आपके पास इनमें से कोई भी सेट है कि आप छोटे आकार का आकार बदल नहीं सकते?

+0

@ जेपी: जांच की गई है ... यह मुद्दा प्रतीत नहीं होता है ... धन्यवाद –

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

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