2009-12-04 16 views
5

एक .NET 2.0 Winforms एप्लिकेशन के लिए एक सुविधाजनक यूआई बनाने के लिए, मैं काम कर रहा हूं, मुझे एक नियंत्रण की आवश्यकता है कि मुझे यकीन है कि किसी भी मानक नियंत्रण के "बॉक्स के बाहर" व्यवहार से परे है। मैं क्या हासिल करने की कोशिश कर रहा हूँ का एक नकली इस प्रकार है:कॉम्प्लेक्स नेट 2.0 विंडोज फॉर्म नियंत्रण: कहां से शुरू करें?

Mock up http://www.claware.com/images/temp/mockup.png

अनिवार्य रूप से, आदिवासी भाषाओं से शब्दांशों में शब्दों पार्स करने के लिए (कोई शब्दकोश का उल्लेख करने के आवेदन के प्रयास के इस हिस्से, किसी भी और सभी यूनिकोड पात्र संभव हैं।) जब तक उपयोगकर्ता इसे दूर ले जाता है, तब तक उसने अपनी भाषा और कुछ अन्य विन्यास में स्वरों/व्यंजनों को पहले ही परिभाषित कर दिया है। इसके बाद आवेदन की एक पुनरावृत्ति प्रक्रिया (1) अनुप्रयोग अनुमान लगाती है कि कुछ नियमों के आधार पर भाषा में कौन से अक्षर मौजूद हैं, (2) उपयोगकर्ता अनुमानों को परिशोधित करता है, सही पार्सिंग का चयन करता है या मैन्युअल रूप से एक शब्द का विश्लेषण करता है, (3) एप्लिकेशन "सीखता है "उपयोगकर्ता की प्रतिक्रिया से और बेहतर अनुमान लगाता है, (4) तब तक दोहराएं जब तक कि डेटा आगे बढ़ने के लिए" पर्याप्त "न हो।

नियंत्रण को प्रत्येक शब्द (ग्रे हेडर), फिर सभी अक्षरों के ब्रेक अनुमान (शब्दों के हिस्सों को अलग करने वाले बिंदुओं के साथ सफेद क्षेत्र) प्रस्तुत करने की आवश्यकता होती है।) एक पार्सिंग मैन्युअल रूप से दर्ज करने का एक तरीका भी है, जो प्रदर्शित होगा एक टेक्स्ट एरिया और सेव बटन (मॉकअप के नीचे।) जब उपयोगकर्ता अनुमान लगाता है, तो पृष्ठभूमि में परिवर्तन होता है और बटन "स्वीकार/अस्वीकार" दिखाई देते हैं। स्वीकार करने पर क्लिक करके, या मैन्युअल पार्सिंग दर्ज करने से, सूची से पूरे शब्द को हटा दिया जाता है। अस्वीकार बटन पर क्लिक करने से बस उस आइटम को हटा दिया जाता है।

मैं ऊपर से स्वरूपण पर 100% बेचा नहीं हूं, लेकिन मुझे लगता है कि आपको प्रारूपण और कार्यात्मक नियंत्रण के प्रकारों का सामान्य विचार मिल सकता है। नियंत्रण लंबवत भी स्क्रॉल करेगा - शुरुआत में हजारों शब्द हो सकते हैं।

आपके लिए मेरा प्रश्न WinForms डेवलपर्स का अनुभव है: कहां से शुरू करें? मैं वास्तव में, वास्तव में नेट कोर फ्रेमवर्क के भीतर रहना चाहता हूं और किसी तीसरे पक्ष के नियंत्रण के विपरीत मौजूदा नियंत्रण का विस्तार करना चाहता हूं। (धार्मिक युद्ध शुरू करने के जोखिम पर: हाँ, मैं एनआईएच-सिंड्रोम से पीड़ित हूं, लेकिन यह बहुत से त्वरित समाधान समाधानों के आधार पर एक सचेत निर्णय है लेकिन तीसरे पक्ष के नियंत्रण के साथ दीर्घकालिक समस्याएं हैं।) मुझे सबसे ज्यादा कहां मिल सकता है "मेरे bucK के लिए बैंग" और कम से कम पहिया reinventing? सूची दृश्य? सूची बाक्स? ScrollableControl? क्या मुझे सब कुछ मैन्युअल रूप से नियंत्रित करने और पेंट करने के लिए वापस जाने की ज़रूरत है? मैं किसी भी मदद की सराहना करता हूं जो प्रदान किया जा सकता है!

[संपादित करें] विचारों के लिए सभी को धन्यवाद। ऐसा लगता है कि मेरे उद्देश्यों के लिए सबसे सुरुचिपूर्ण समाधान एक कस्टम नियंत्रण बनाना है जिसमें फ्लोलाउटआउट पैनल और वीएसक्रॉलबार शामिल है। FlowLayoutPanel में प्रत्येक शब्द के लिए उपयोग किए गए कस्टम नियंत्रण के उदाहरण हो सकते हैं। लेकिन FlowLayoutPanel वर्चुअल है, यानी इसमें केवल उन उदाहरण शामिल हैं जो दिखाई दे रहे हैं (और कुछ "स्क्रॉल से बाहर")। VScrollBar घटनाओं को निर्धारित करता है कि क्या लोड किया जाना चाहिए। लिखने के लिए थोड़ा सा कोड, लेकिन बहुत बुरा नहीं है और अच्छी तरह से काम करता प्रतीत होता है।

+0

क्या आप डब्ल्यूपीएफ का उपयोग करने से बाध्य हैं? एक सम्मान में यह WinForms + HTML है और आपके मॉक अप अभिव्यक्ति मिश्रण में चाबुक करना आसान होगा। – sipwiz

+0

अफसोस की बात है, हाँ। मैं अक्सर उन "आदमी, मैं वास्तव में चाहता हूं कि हम WPF का उपयोग कर सकें" क्षण। –

+0

मुझे तैयार लेख देखने में दिलचस्पी होगी .... – cjk

उत्तर

4

मैं TableLayoutPanel और FlowLayoutPanel नियंत्रणों को देखता हूं। ये आपको लंबवत फैशन में मध्यम आसानी से नियंत्रण की एक श्रृंखला व्यवस्थित करने देगा। मैं फिर एक UserControl बनाउंगा जिसमें एक लेबल और 2 बटन होते हैं। UserControl बटन क्लिक के लिए उजागर किए गए टेक्स्ट और ईवेंट जैसे गुणों का खुलासा करेगा .. सूची में प्रत्येक प्रविष्टि के लिए, आप UserControl का एक उदाहरण बनायेंगे, टेक्स्ट मान असाइन करेंगे, और क्लिक ईवेंट को संभालेंगे। उदाहरण तालिका/फ्लो पैनल में सही क्रम में रखा जाएगा। उन दोनों लेआउट पैनल अन्य वस्तुओं के बीच वस्तुओं को सम्मिलित करने की अनुमति देते हैं ताकि आप सूची से वस्तुओं को गतिशील रूप से जोड़/हटा सकें।

संपादित करें: जो आप प्रस्तुत करने की कोशिश कर रहे हैं उसकी लंबाई को देखते हुए, मैं डेटाग्रिड व्यू का उपयोग करने पर विचार करता हूं और यह करने के लिए कुछ कस्टम प्रतिपादन करता हूं कि आप इसे कैसे काम करना चाहते हैं। डीजीवी की प्रतिपादन घटनाओं का उपयोग करके आप कॉलम मर्ज कर सकते हैं, पृष्ठभूमि रंग बदल सकते हैं (जैसे कि गहरे ग्रे लाइनों को हाइलाइट करना), बटन चालू/बंद करें, और अपनी पंक्तियों के लिए ग्रिड को संपादन मोड में बदलने के लिए नए मानों को संशोधित करने या डालने की अनुमति दें । यह विधि आसानी से बड़े डेटासेट को संभालेगी और आप उन्हें सीधे आसानी से बांध सकते हैं।

+0

एक छोटे से डेटा सेट के लिए, यह काफी अच्छी तरह से काम कर सकता है। लेकिन FlowLayoutPanels लोड करने के करीब आने से पहले मैं खिड़की हैंडल से बाहर भाग जाऊंगा।हजारों शब्द बार प्रति शब्द कई उपयोगकर्ता नियंत्रण = बहुत अधिक। शायद इसका एक "आभासी" संस्करण, स्क्रॉल स्थिति का ट्रैक रखते हुए ... –

+0

मुझे मूल प्रश्न के "हजारों शब्दों" भाग को याद आया। मैं अपने उत्तर को एक और संभावित समाधान के साथ अपडेट कर दूंगा। –

+0

FlowLayoutPanel के साथ नेस्टेड कस्टम नियंत्रण का वर्चुअल संस्करण काम करने जा रहा है। –

0

यहाँ कैसे मैं यह कर देगा:

एक कस्टम नियंत्रण बनाएँ। इस कस्टम नियंत्रण में, लिंकबटन के ऊपर एक सूची बॉक्स है, और जब लिंकबटन क्लिक किया जाता है तो आप इसे टेक्स्टबॉक्स पर पहुंच सकते हैं। ListBoxes में शीर्ष पंक्ति अचयनित होगी ... आप शायद वहां से बाकी प्राप्त कर सकते हैं। जब आप शब्दों की सूची प्राप्त, प्रत्येक शब्द के लिए एक नियंत्रण के साथ किसी तरह के स्क्रॉल भरने:

(foreach String word in words){ 
    myScrollable.add(new MyComponent(word)); 
} 

वहाँ से, मुझे यकीन है कि क्या आप बक्से या डेटा के साथ क्या करना चाहते हैं नहीं कर रहा हूँ, लेकिन यह है यूआई सेटअप पर मेरा प्रारंभिक विचार।

2

अच्छा, यह निश्चित रूप से एक कस्टम घटक के लिए उम्मीदवार की तरह दिखता है जिसे आपको स्वयं बनाना चाहिए। आप इसे मानक का उपयोग कर बना सकते हैं।एक टेक्स्ट बॉक्स के साथ नेट ड्राइंग कमांड, और एक नियमित बटन नियंत्रण।

अब आप यह जानना चाहते हैं कि कहां से शुरू करना है।

विंडोज फॉर्म नियंत्रण लाइब्रेरी प्रोजेक्ट बनाएं। टेक्स्टबॉक्स और बटन नियंत्रण में ड्रॉप करें।

पैनल ड्राइंग कोड को कोड द्वारा अधिमानतः किया जाना चाहिए। यह नियमित जीडीआई + आदेशों का उपयोग करके किया जा सकता है।

संपादित करें:

यहाँ एक और विचार है, और एक कि मैं व्यावहारिक रूप से बड़ी सफलता के साथ अपने ही परियोजना में उपयोग किया है।

आप ऐप में वेब-ब्राउज़र नियंत्रण का उपयोग कर सकते हैं और अपना डेटा एचटीएमएल के रूप में दिखा सकते हैं। आप टेक्स्टबॉक्स में इनपुट के आधार पर वेब ब्राउज़र नियंत्रण के स्रोत को अपडेट कर सकते हैं, और वेब ब्राउज़र नियंत्रण में दिए गए लिंक पर क्लिक करने से आपको वह घटना मिल जाएगी जो आप कुछ क्रिया करने के लिए जाल कर सकते हैं। आपका सीएसएस काम करेगा।

मैंने इस तकनीक का उपयोग एक ऐप में 'डेस्कटॉप' बनाने के लिए किया था जिसे मैंने 'सही लेखा सॉफ्टवेयर' कहा था। लोग डेस्कटॉप से ​​इतना प्यार करते थे कि यह ऐप की सबसे अच्छी प्रेम सुविधाओं में से एक है।

+0

यह बहुत दिलचस्प लगता है। आपने छवियों को कैसे संभाला? उन्हें अस्थायी निर्देशिका में सहेजें और टैग को इंगित करें? या क्या एक और सुरुचिपूर्ण तरीका है? –

+0

मैंने उन्हें ऐप में एक विशिष्ट फ़ोल्डर में रखा था। मुझे लगता है कि यह एक पूरी तरह से सुरुचिपूर्ण दृष्टिकोण है। –

+0

हालांकि मैं अंततः वेब ब्राउज़र मार्ग पर नहीं जा रहा था, यह एक आकर्षक विचार है जिसे मैंने कभी नहीं सोचा था और मैं इस विचार की सराहना करता हूं। यह एक और परियोजना पर काफी आसान हो सकता है! –

0

वेबब्राउज़र नियंत्रण का उपयोग करें और दस्तावेज़स्ट्रीम या दस्तावेज़ टेक्स्ट का उपयोग करके HTML मार्कअप उत्पन्न करें।

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