2009-11-05 16 views
6

मैं Winforms एप्लिकेशन में बटनों की सरणी कैसे बना सकता हूं?मैं बटनों का सी # एरे कैसे बना सकता हूं?

मैं जो करने की कोशिश कर रहा हूं वह यह है: मेरे पास कैलेंडर व्यवस्था में बहुत सारे बटन हैं, जो समय स्लॉट का संकेत दे रहे हैं। आईई: सोमवार 07700 बटन, सोमवार 07730 बटन, सोमवार 0800 बटन, और 30 मिनट अंतराल में भी।

मेरे पास एक एक्सएमएल डेटाबेस है, जहां नियुक्तियों के लिए फ़ील्ड <Duration> है जब अवधि = 0.5hrs, और <Time> फ़ील्ड 'सोमवार 0700 बटन' रंग के लिए "07:00 बजे" बराबर होती है। जब अवधि 1.0 घंटे होती है, तो मैं इसे 'सोमवार 07700 बटन' के साथ-साथ 'सोमवार 07730 बटन' के निम्नलिखित समय स्लॉट बटन को पॉप्युलेट करना चाहता हूं।

कोई विचार? धन्यवाद।

+3

पूरी तरह से प्रश्न से संबंधित नहीं है, लेकिन थोड़ा आगे देखकर, आप http: //www.devexpress पर एक नज़र रखना चाहेंगे।कॉम/प्रोडक्ट्स/नेट/कंट्रोल/विनफॉर्म/शेड्यूलर /, अपने आप को लिखने के बजाय कैलेंडर प्लानर के रूप में उपयोग करने के लिए, आप कम प्रयास के लिए इसे अधिक से अधिक प्राप्त करेंगे – RC1140

+0

+1 स्टैकरर: हम उस नियंत्रण का उपयोग करते हैं (अच्छी तरह से पूरे उद्यम सुइट) जहां मैं कुछ महान परिणामों के साथ काम करता हूं। पर्याप्त सिफारिश नहीं कर सका। –

उत्तर

5

हां, आप नीचे दिए गए बटनों की एक सूची बना सकते हैं।

List<Button> listOfButtons = new List<Button>(); 
listOfButtons.Add(yourButton); 
+1

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

+0

@ रॉबर्ट हार्वे: इस उदाहरण में, आपको प्रोग्राम हैंडलर प्रोग्रामेटिक रूप से जोड़ना होगा। – FrustratedWithFormsDesigner

+3

मुझे अपना अपवर्त प्राप्त करने के लिए उससे बेहतर करना होगा। –

3

हां, बटनों या किसी ऑब्जेक्ट की सरणी बनाने में कोई समस्या नहीं है। आप उन्हें विजुअल स्टूडियो डिजाइनर में नहीं देख पाएंगे, लेकिन वे ठीक काम करेंगे।

बहुत समय पहले मैंने कैलक्यूलेटर ऐप के लिए UI बनाने के लिए 2-डी सरणी बटन का उपयोग किया था। मैंने लंबे समय तक एचपी -15 सी का इस्तेमाल किया था, और इसे याद किया।

alt text

सरणी दृष्टिकोण ठीक काम किया।

Button[] numberButtons=new Button[] { btn0, btn1, btn2, btn3, btn4, btn5, btn6, btn7, btn8, btn9, btnDecimalPt}; 
    Button[] operationButtons=new Button[] { btnDiv, btnMult, btnSubtract, btnAdd }; 

    foreach (var b in numberButtons) 
     b.Click += new System.EventHandler(this.Number_Click); 

    foreach (var b in operationButtons) 
     b.Click += new System.EventHandler(this.Operation_Click); 

    // etc 

    Button[][] allButtons= 
    { 
     new Button[] {btnSqrt, btnExp, btn10x, btnPow,btnMultInverse, btnCHS, null, null, null, null}, 
     new Button[] {btnN, btnInterest, btnPMT, btnPV, btnFV, null, btn7, btn8, btn9, btnDiv}, 
     new Button[] {btnLn, btnLog, btnSine, btnCosine, btnTangent, btnPi, btn4, btn5, btn6, btnMult}, 
     new Button[] {btnRoll, btnSwap, btnCLRfin, btnCLX, btnCLR, btnEnter, btn1, btn2, btn3, btnSubtract}, 
     new Button[] {btnInt, btnFrac, btnFix, btnStore, btnRecall, null, btn0, btnDecimalPt, btnNotUsed, btnAdd} 
    }; 

    // programmatically set the location 
    int col,row; 
    for(row=0; row < allButtons.Length; row++) 
    { 
     Button[] ButtonCol= allButtons[row]; 
     for (col=0; col < ButtonCol.Length; col++) 
     { 
      if (ButtonCol[col]!=null) 
      { 
       ButtonCol[col].TabIndex = col + (row * allButtons.Length) +1; 
       ButtonCol[col].Font = font1; 
       ButtonCol[col].BackColor = System.Drawing.SystemColors.ControlDark; 
       ButtonCol[col].Size=new System.Drawing.Size(stdButtonWidth, stdButtonHeight); 
       ButtonCol[col].Location=new Point(startX + (col * stdButtonWidth), 
               startY + (row * stdButtonHeight)) ; 
      } 
     } 
    } 
+0

जब मैं ऐसा करता हूं, मुझे रनटाइम त्रुटि मिलती है जैसे ही यह फ़ोरैच हिट करता है (संख्या buttons में var b) b.Click + = new system.EventHandler (this.Number_Click); – user1747567

0

सभी जीयूआई तत्वों की तरह बटन, किसी अन्य की तरह वस्तुएं हैं (जो भी प्रदर्शित होने योग्य होते हैं)। तो हाँ, आपके पास सरणी, सूचियां, शब्दकोश हो सकते हैं - जो भी आप बटन चाहते हैं। टेलर एल response में कुछ नमूना कोड है।

0

हां, यह संभव है, जैसा कि टेलर एल ने दिखाया था। एकमात्र पकड़ यह है कि वीबी 6-शैली नियंत्रण सरणी, जो नियंत्रण और प्रतिलिपि बनाकर बनाई गई हैं, अब फॉर्म एडिटर में नहीं की जा सकती हैं।

3

हाँ, निश्चित रूप से संभव है, लेकिन शायद अनावश्यक है।

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

while (reader.Reader()) 
{ 
    // Parse XML here 

    // Instantiate a new button that will be added to your FlowLayoutPanel 
    Button btn = new Button(); 

    // Set button properties, as necessary 
    btn.Text = "Foo"; 
    btn.Click += new EventHandler(SomeButton_Click); 

    // Add the button to the FlowLayoutPanel 
    flowLayoutPanel.Controls.Add(btn); 
} 

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

उपर्युक्त दृष्टिकोण के साथ आपको एक समस्या का सामना करना पड़ेगा कि यह हमेशा सटीक उसी ईवेंट हैंडलर को कॉल करता है। नतीजतन, आपको यह निर्धारित करने के लिए एक रास्ता तय करना होगा कि कौन सा बटन क्लिक किया गया है। एक दृष्टिकोण अतिरिक्त गुण प्रदान करने के लिए बटन नियंत्रण का विस्तार करना हो सकता है जिसका उपयोग समय अवधि को स्वीकार करने के लिए किया जा सकता है।

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