पृष्ठभूमिविंडोज से बचने के लिए कैसे फॉर्म्स रेडियो बटन कंटेनर ऑटो समूह
नेट Windows Forms में (2.0) रेडियो बटन स्वचालित रूप से अपने कंटेनर नियंत्रण द्वारा वर्गीकृत किया है, चाहे वह एक फार्म, कक्ष या GroupBox है।
इसका मतलब है कि जब आप एक रेडियो बटन चुनते हैं, तो उसी कंटेनर में मौजूद प्रत्येक अन्य रेडियो बटन स्वचालित रूप से अनचेक स्थिति में बदल जाता है।
अब ये पर्चा लेआउट पर विचार करें:
MUST HAVE NICE TO HAVE DESCRIPTION
--------- ------------ -----------------------------------------------
[ ] [ ] The gizmo works
[ ] [ ] The gizmo works beautifully
[ ] [ ] The gizmo works amazingly and makes you breakfast
[ ] [ ] The gizmo comes with a pony
- प्रत्येक
'[ ]'
एक रेडियो बटन है। - उपयोगकर्ता स्तंभ में आवश्यक जवाब चुनने के लिए कहा जाता है, और वैकल्पिक कॉलम में (वांछित, सबसे मामले जवाब) 2.
आप देख सकते हैं, रेडियो बटन होना चाहिए कॉलम द्वारा समूहीकृत किया जाना चाहिए: रेडियो में से किसी एक को चुनना शेष कॉलम को साफ़ करना चाहिए, लेकिन दूसरे कॉलम में इसका कोई प्रभाव नहीं होना चाहिए।
समस्या
असल समस्या यह है कि यह एक गतिशील रूप से उत्पन्न रूप है।
- लेआउट में पंक्तियों की संख्या गतिशील है और इसे कॉन्फ़िगर करने योग्य फ़ॉर्म परिभाषा से लोड किया गया है।
- विवरण टेक्स्ट रनटाइम तक ज्ञात नहीं है और लंबाई एक बहुत बड़ा अंतर है (कुछ में केवल कुछ शब्द हो सकते हैं, और कुछ अन्य लाइनों में दर्जन हो सकते हैं)।
- लेआउट को फिर से डिजाइन नहीं किया जा सकता है। यह (गैर-तकनीकी) उपयोगकर्ताओं की परिचितता से आता है जो इस फ़ॉर्म के पेपर संस्करण के साथ वर्षों से उपयोग में हैं। यह फॉर्म भी मुद्रित होगा और यहां तक कि अगर मैंने अपने फॉर्म पर इनपुट सिस्टम बदल दिया है, तो इसका मतलब है कि 'पुराने' लेआउट के साथ प्रिंट करने के लिए एक और संस्करण कोडिंग करना होगा।
मैं क्या कोशिश की है और काम नहीं किया
मैं पहली बार, तीन पैनलों, प्रत्येक स्तंभ के लिए एक का उपयोग कर एक गतिशील रूप से उत्पन्न लेआउट के रूप में यह लागू करने की कोशिश की तो स्वत: रेडियो बटन समूह सिर्फ काम करेगा ठीक। और यह किया।
लेकिन रेडियो बटन और उसके पाठ के बीच क्षैतिज संरेखण से संबंधित लेआउट समस्याएं सिर्फ मुझे मार रही हैं। पाठ का आकार रनटाइम तक ज्ञात नहीं है और टेक्स्ट लाइनें लपेट सकती हैं (कभी-कभी प्रत्येक आइटम के लिए कई बार)। कभी-कभी यह ठीक से संरेखित होता है, कभी-कभी ऐसा नहीं होता है। मैं इसे डिबग करना शुरू कर रहा हूं, लेकिन मैं सोच रहा हूं कि शायद यह तीन-पैनल कार्यान्वयन बदलना एक बेहतर विकल्प है।
मैं आदेश संरेखण से संबंधित मुद्दों को आसान बनाने में एक TableLayoutPanel
तीन के साथ कॉलम का उपयोग करके लेआउट नया स्वरूप चाहते हैं क्या मैं
करने के लिए कोशिश कर रहा हूँ, लेकिन यह है कि इसका मतलब है कि मैं स्वत: रेडियो उपयोग नहीं कर सकते बटन ग्रुपिंग-बाय-कंटेनर "फीचर"।
संपादित करें:
के रूप में Gerrie का सुझाव दिया, अन्य लेआउट विकल्प एक उपयोगकर्ता नियंत्रण के रूप में लागू प्रत्येक पंक्ति है और एक प्रवाह लेआउट पैनल का उपयोग करने के लिए है।
इसका मतलब है कि, मैं लेआउट के लिए नियंत्रण का उपयोग करना चाहता हूं, लेकिन रेडियो बटन ग्रुपिंग के लिए नहीं।
मैं क्षैतिज उपयोगकर्ता उपयोग करने के बावजूद खड़ी रेडियो बटन समूहों पाने के लिए की आवश्यकता होगी नियंत्रित करता है
/संपादित करें
क्या मैं
पूछने के लिए मैं के बारे में कैसे संकेत दिए गए और सुझाव की जरूरत है कोशिश कर रहा हूँ रेडियो बटन के समूह को मैन्युअल रूप से नियंत्रित करने के लिए। यदि आवश्यक हो तो मुझे वास्तव में RadioButton
कक्षा उपclassing नहीं लगता है।
विशेष रूप से, क्या 'रेडियोबटन' उप-वर्गीकरण का कोई 'कैननिकल' या ज्ञात तरीका है या Win32 एपीआई के लिए सभी तरह से नीचे जाना है, ताकि हर बार नियंत्रण की जांच हो (माउस, कीबोर्ड एंटर, स्पेस बार, और किसी भी अन्य तरीके से कि मुझे उन्हें चुनने के बारे में पता नहीं हो सका) मैं इस कार्यक्रम को जाल कर सकता हूं और अपने फॉर्म पर हर दूसरे नियंत्रण की स्थिति को मैन्युअल रूप से अपडेट कर सकता हूं और इस तरह से स्वचालित समूह सुविधा को 'डी-एक्टिवेटेड' ? मुझे डर है कि कार्यान्वयन भी कंटेनर से संबंधित है, और मुझे पैनल को उपclass करने के लिए भी मजबूर किया जा सकता है?
विंडोज़ फॉर्म में समूह 'जादू' कैसे काम करता है?
प्रत्येक समाधान को मैंने पाया है कि कस्टम रेडियो बटन समूह या 'रेडियो बटन सूचियों' लागू करता है समूह के लिए एक कंटेनर का उपयोग करने में किसी भी तरह से आधारित है। कंटेनरों से बचा जा सकता है? यदि हां, तो कैसे?।
यदि आप इस समाधान के साथ जा रहे हैं, तो यह एक रेडियो में बनने के लिए एक ऐसा रेडियोबूटटन बनाने का अच्छा समय होगा। और जब आप इसमें हों, तो एक वैकल्पिक संपत्ति GroupID जोड़ें, जिसे टॉगल करते समय वापस भेजा जाता है। – Stefan
फिर, आपकी मदद स्टीफन के लिए धन्यवाद। वैसे, मैंने पहले से ही एक स्वतंत्र रैडियो बटन क्लास बनाया था, लेकिन अभी तक समूह आईडी संपत्ति को जोड़ने के लिए मेरे साथ ऐसा नहीं हुआ। बस सही लगता है। –
कुछ और विचारों के लिए मेरे उत्तर के संपादन की जांच करें। –