2009-02-23 10 views
7

पृष्ठभूमिविंडोज से बचने के लिए कैसे फॉर्म्स रेडियो बटन कंटेनर ऑटो समूह

नेट 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 करने के लिए भी मजबूर किया जा सकता है?

विंडोज़ फॉर्म में समूह 'जादू' कैसे काम करता है?

प्रत्येक समाधान को मैंने पाया है कि कस्टम रेडियो बटन समूह या 'रेडियो बटन सूचियों' लागू करता है समूह के लिए एक कंटेनर का उपयोग करने में किसी भी तरह से आधारित है। कंटेनरों से बचा जा सकता है? यदि हां, तो कैसे?।

उत्तर

6

एक अस्थायी समाधान (पढ़ें: गंदा हैक) मैंने पाया कि मैं डाल रहा हूं प्रत्येक और अपने स्वयं के छोटे पैनल में हर रेडियो बटन है। तो उनमें से किसी के बीच कोई भी समूह नहीं होता है। मैं हर बटन checked घटनाओं को सुन रहा हूं और तदनुसार उपयुक्त लोगों को अपडेट कर रहा हूं।

मुझे अभी भी लगता है कि यह कई पैनलों के लिए अधिक है, और यदि किसी के पास क्लीनर समाधान है तो मुझे यह सुनना अच्छा लगेगा।

(ठीक है, मेरे अपने प्रश्न का उत्तर देने के लिए खेद है। तुम्हें पता है कि जब आप आप इसे एक अलग प्रकाश। समस्या देख शुरू कुछ समझाने के लिए समय लेने के लिए)

+0

यदि आप इस समाधान के साथ जा रहे हैं, तो यह एक रेडियो में बनने के लिए एक ऐसा रेडियोबूटटन बनाने का अच्छा समय होगा। और जब आप इसमें हों, तो एक वैकल्पिक संपत्ति GroupID जोड़ें, जिसे टॉगल करते समय वापस भेजा जाता है। – Stefan

+0

फिर, आपकी मदद स्टीफन के लिए धन्यवाद। वैसे, मैंने पहले से ही एक स्वतंत्र रैडियो बटन क्लास बनाया था, लेकिन अभी तक समूह आईडी संपत्ति को जोड़ने के लिए मेरे साथ ऐसा नहीं हुआ। बस सही लगता है। –

+0

कुछ और विचारों के लिए मेरे उत्तर के संपादन की जांच करें। –

1

मैं एक सरल और सीधा समाधान के लिए जाना होगा। उदाहरण के लिए, एक कस्टम नियंत्रण जो एक पंक्ति का प्रतिनिधित्व करता है (इसलिए दो रेडियो बटन और एक लेबल)।

संपादित करें: ठीक है, मुझे लगता है कि अब मैं आपकी आवश्यकता को समझता हूं। क्या आपके पास रेडियोबूटन के दो संग्रह नहीं हो सकते हैं: कॉलम ए में से एक और कॉलम बी में से कोई?

जब आपका फॉर्म खींचा जाता है तो उन्हें दो सूची < रेडियोबटन> या जो कुछ भी दो अलग-अलग घटनाओं में जोड़ दें: कॉलमरबीक, कॉलमबीबीसीएचकेड। जब घटनाओं में से एक आग लगती है, तो आप कृपया कुछ रेडियोबुटन को चेक/अनचेक करने के लिए कुछ तर्क कह सकते हैं।

+0

कि लेआउट उद्देश्यों के लिए TableLayoutPanel के बजाय काम करेगा, ज़रूर। इस समाधान के साथ समस्या यह है कि उपयोगकर्ता नियंत्रण के अंदर बटन अभी भी उपयोगकर्ता नियंत्रण के अंदर समूहित किए जाएंगे।तो मेरे पास 2 समूहों (प्रत्येक कॉलम के लिए एक) के बजाय उपयोगकर्ता नियंत्रण उदाहरण के रूप में कई समूह होंगे। –

+0

तब मुझे डर है कि मैं आपकी आवश्यकता पूरी तरह समझ नहीं पा रहा हूं। आप क्षैतिज समूह सही चाहते हैं? आप ऊर्ध्वाधर पैनलों को भी क्यों चाहते हैं? आप कस्टम नियंत्रण के संग्रह पर सिर्फ लूप क्यों नहीं कर सकते हैं और पढ़ सकते हैं कि कौन सा रेडियो बटन चेक किया गया है? –

+0

क्षमा करें, मैं यह स्पष्ट करने के लिए प्रश्न संपादित करूंगा कि वास्तव में क्षैतिज समूह (जो डिफ़ॉल्ट रूप से होता है) वह नहीं है जो मुझे चाहिए, लेकिन लंबवत समूहकरण। धन्यवाद। –

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