2008-09-02 7 views
8

शायद मुझे अभी तक पर्याप्त रूप से पर्याप्त नहीं पता है, लेकिन मुझे अभी तक .NET में इस सरल वीबी 6 कोड को लागू करने का एक संतोषजनक तरीका नहीं दिख रहा है (मान लीजिए कि यह कोड सर कमांड 1 (एन) में एन कमांडबटन के साथ एक फॉर्म पर है। और सरणी में एन बक्सें पाठ 1()):वीबी 6 नियंत्रण सरणी के सबसे सरल .NET समतुल्य क्या है?

Private Sub Command1_Click(Index As Integer) 

    Text1(Index).Text = Timer 

End Sub 

मैं जानता हूँ कि यह बहुत ही उपयोगी कोड नहीं है, लेकिन यह कितनी आसानी से नियंत्रित कर सरणियों VB6 में इस्तेमाल किया जा सकता को दर्शाता है। सी # या वीबी.नेट में सबसे सरल समतुल्य क्या है?

+0

यह भी देखें http://stackoverflow.com/questions/5497403/control-array-in-vb-net और http://stackoverflow.com/questions/5738092/vb6-control-arrays-in-net – MarkJ

+0

शायद आप भविष्य में मेरे विचार को देख सकते हैं: http://stackoverflow.com/questions/5738092/vb6-control-arrays-in-net/42627033#42627033, मुझे लगता है कि यह इस मुश्किल सवाल का समाधान प्रदान करता है। –

उत्तर

5

बक्सें की एक सामान्य सूची बनाएँ .NET में एकाधिक बटन से बटन दबाता है। फिर आप टैग संपत्ति में खोजने के लिए टेक्स्ट बॉक्स जोड़ सकते हैं?

Private Sub AllButton_Click(sender As Object, e As EventArgs) Handles Button1.Click, Button2.Click, Button3.Click 
    Dim c As Control = CType(sender, Control) 
    Dim t As TextBox = FindControl(CType(c.Tag, String)) 
    If t Is Not Nothing Then 
    t.Text = "Clicked" 
    End If 
End Sub 
0

नियंत्रणों की एक श्रृंखला बनाएं।

Private Sub TextBox_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) _ 
     Handles TextBox1.TextChanged, _ 

     TextBox2.TextChanged, _ 

     TextBox3.TextChanged 

End Sub 
4

एक और अच्छी बात यह है वीबी नेट करता है कि एक ही ईवेंट हैंडलर कि कई नियंत्रण संभालती हो रही है। वर्तमान वीबी 6 नियंत्रण सरणी को प्रतिस्थापित करने के लिए अपग्रेड विज़ार्ड का उपयोग किया जाता है।

हालांकि, वीबी 6 में एक नियंत्रण सरणी केवल वीबी 6 के साथ सतह पर कुछ वाक्यविन्यास जादू कर वस्तुओं के संग्रह का संग्रह है। .NET दुनिया में, इसे हटाकर, वे बेहतर प्रथाओं को मजबूर कर रहे हैं।

समापन में, जेनरिक के आगमन के साथ, वहाँ कुछ भी नहीं

List<YourControl> MyControlArray. 
1

VisualBasic नेट की अनुकूलता पुस्तकालय मजबूत टाइप नियंत्रण सरणियों शामिल हैं:

TextBox[] textboxes = new TextBox[] { 
    textBox1, 
    textBox2, 
    textBox3 
}; 
2

वहाँ दो पहलू हैं का उपयोग करने से रोक रहा है।

.NET आसानी से नियंत्रण के सरणी का समर्थन करता है, वीबी 6 को केवल एक कामकाज का उपयोग करना पड़ता था क्योंकि अन्यथा, घटनाओं को तारों में वास्तव में कठिन था। .NET में, घटनाओं को गतिशील रूप से तारों को तार करना आसान है।

हालांकि, .NET फॉर्म डिजाइनर एक साधारण कारण के लिए नियंत्रण सरणी का समर्थन नहीं करता है: नियंत्रण के सरणी रन टाइम पर बनाए/बढ़ाए जाते हैं। यदि आप जानते हैं कि संकलन समय पर आपको कितने नियंत्रण की आवश्यकता है (तर्क जाता है) तो आप उन्हें अलग-अलग नाम देते हैं और उन्हें सरणी में नहीं डालते हैं।

मैं जानता हूँ कि यह बहुत ही उपयोगी कोड

वास्तव में बात है कि नहीं है। यदि यह बेकार है तो एक सुविधा क्यों है?

यदि आवश्यक हो, तो आप भी एक नियंत्रण नाम से उपयोग कर सकते हैं, कुछ इस तरह है, जिसके परिणामस्वरूप:

var textBoxes = new List<TextBox>(); 

// Create 10 textboxes in the collection 
for (int i = 0; i < 10; i++) 
{ 
    var textBox = new TextBox(); 
    textBox.Text = "Textbox " + i; 
    textBoxes.Add(textBox); 
} 

// Loop through and set new values on textboxes in collection 
for (int i = 0; i < textBoxes.Count; i++) 
{ 
    textBoxes[i].Text = "New value " + i; 
    // or like this 
    var textBox = textBoxes[i]; 
    textBox.Text = "New val " + i; 
} 
+0

जब मैंने कहा, "यह बहुत उपयोगी कोड नहीं है" मैं अपने उदाहरण का जिक्र कर रहा था। मुझे नियंत्रण एरे को वीबी 6 में बेहद उपयोगी पाया गया है, यही कारण है कि मैंने सवाल उठाया। मैंने आपका प्रस्तावित समाधान बहुत चालाक पाया, लेकिन यह सिर्फ एक कूड़े की तरह लगता है। – raven

0

एक ही क्लिक करें घटना संभाल कर सकते हैं:

Private Sub Command_Click(sender As Object, e As EventArgs) Handles Command1.Click, Command2.Click … 
    Dim name As String = DirectCast(sender, Control).Name 
    Dim index As Integer = Integer.Parse(name.Substring("Command".Length)) 
    Controls(String.Format("Text {0}", index)).Text = Timer.Value.ToString() 
End Sub 
3

नेट में अनुरूप नहीं असली 1 1 करने के लिए नहीं है। निश्चित रूप से, आप किसी विशिष्ट प्रकार के नियंत्रणों के सरणी या सूचियां बना सकते हैं, लेकिन ऐसा कुछ भी नहीं है जो आपके लिए स्वचालित रूप से ऐसा करेगा।

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

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

0

दो VB6 में नियंत्रण सरणियों का मुख्य लाभ थे: (1) वे आपको नियंत्रण (2) वे आपको नियंत्रण

के बीच की घटनाओं साझा करने की अनुमति का एक संग्रह के माध्यम से पुनरावृति करने के लिए एक तरीका प्रदान (1) नियंत्रण में एक सरणी का उपयोग कर नेट में पूरा किया जा सकता है (2) एक ईवेंट को एकाधिक नियंत्रण संभाल कर पूरा किया जा सकता है (वाक्यविन्यास थोड़ा अलग है क्योंकि आप myArray(index) के बजाय sender तर्क का उपयोग करते हैं)।

नेट के बारे में एक अच्छी बात यह है कि ये सुविधाएं decoupled हैं। तो उदाहरण के लिए आपके पास ऐसे नियंत्रण हो सकते हैं जो घटनाओं को साझा करते हैं भले ही वे किसी सरणी का हिस्सा न हों और अलग-अलग नाम और यहां तक ​​कि एक अलग प्रकार भी हों। और आप नियंत्रणों के संग्रह के माध्यम से फिर से शुरू कर सकते हैं भले ही उनके पास पूरी तरह से अलग घटनाएं हों।