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

कम्बोबॉक्स में टेक्स्ट होगा

v6.1
v6.4 
v7.2
v8.6

और इसी तरह

जिस फ़ंक्शन को मैं कॉल करना चाहता हूं उसे Getinfo_ नाम दिया गया है जिसमें कम्बोबॉक्स से टेक्स्ट को जोड़ने के साथ . _ के साथ प्रतिस्थापित किया गया मैं combobox से v6.1 चुनूंगा और ऐसा करने में मैं Getinfo_v6_1 नामक फ़ंक्शन को कॉल करूंगा

बहुत सोच-विचार के बाद खोज और कोशिश करने के बाद मैं करीब आ गया हूं लेकिन अभी तक काफी करीब नहीं आया हूं। मुझे लगता है कि मुझे प्रतिबिंब (शायद नहीं) का उपयोग करने की आवश्यकता है और

private void cmbobx_version_SelectedIndexChanged(object sender, EventArgs e)
{
    Type t = this.GetType(); //need to get the type
    MethodInfo method = t.GetMethod("Getinfo" + cmbobx_version.Text.Replace('.', '_'));   //put together function name
     method.Invoke(this, new object[] {Fridge, "Order" }); //call function with parameters
}

दुर्भाग्य से यह आह्वान पर रुक जाता है कि विधि न्यूल है, मुझे समझ में नहीं आता कि यह इतना अलग क्यों है कि मैं पूरी तरह से गलत समझ रहा हूं कि मैं क्या कर रहा हूं।

जिस फ़ंक्शन को मैं कॉल करना चाहता हूं वह निम्न जैसा दिखेगा:

public void Getinfo_v6_1(ComboBox inFocusComboBox, string action)
{
  switch (inFocusComboBox.Text)
        {
           case "Red": Price = 11254; break;
           case "Blue": Price = 11278; break;
           case "Green": Price = 11354; break;
         }
}


public void Getinfo_v6_4(ComboBox inFocusComboBox, string action)
{
   switch (inFocusComboBox.Text)
        {
            case "Red": Price = 254; break;
            case "Blue": Price = 278; break;
            case "Green": Price = 354; break;
          }
}

मुझे जो करने की ज़रूरत है उसे करने का एक बेहतर तरीका होने पर भी सभी मदद की बहुत सराहना की जाती है।

0
user3884423 9 अगस्त 2019, 17:35

2 जवाब

सबसे बढ़िया उत्तर

Ošħ Williard के लिए धन्यवाद, मैं वास्तव में अंडरस्कोर से चूक गया था और इसके साथ काम करते समय मैंने ध्यान नहीं दिया था क्योंकि मैं से एक टेक्स्ट रिप्लेस भी करता हूं। to _ और सोचा कि यह सब सही है। डिबगिंग करते समय भी मैंने इसे नहीं देखा, अक्सर हम स्पष्ट नहीं देख पाते हैं, इसलिए मुझसे अधिक बुद्धिमान लोगों की दूसरी राय हमेशा अच्छी होती है।

कार्य कोड अब इस प्रकार है।

private void cmbobx_version_SelectedIndexChanged(object sender, EventArgs e)
{
    Type t = this.GetType(); //need to get the type
    MethodInfo method = t.GetMethod("Getinfo_" + cmbobx_version.Text.Replace('.', '_'));   //put together function name
     method.Invoke(this, new object[] {Fridge, "Order" }); //call function with parameters
}

कृपया सावधान रहें क्योंकि कार्यों का कोई संदर्भ नहीं होगा लेकिन यह संकलित होगा और काम करेगा। जब आप सही फ़ंक्शन को कॉल करते हैं तो यह सब रन-टाइम पर काम करता है।

0
user3884423 12 अगस्त 2019, 13:14

आपको डिज़ाइन पैटर्न के बारे में पढ़ना चाहिए उदाहरण के लिए आप पॉलिमॉर्फिक आइटम बना सकते हैं जो आपके फ़ंक्शन को लागू करते हैं उदाहरण के लिए टेम्पलेट डिज़ाइन पैटर्न। प्रतिबिंब से बचने की कोशिश करें क्योंकि यह 'धीमा' है और सुरक्षित टाइप नहीं करता है।

0
Wouter 9 अगस्त 2019, 19:46