नमस्ते ढेर अतिप्रवाह!

मेरे पास एक तरीका है जो तब निष्पादित होता है जब बटन की चेक की गई स्थिति बदल जाती है। विधि छद्म डेटा के साथ एक समृद्ध टेक्स्ट एडिटर के भीतर प्लेसहोल्डर टेक्स्ट को स्वैप करती है और इसके विपरीत। उपयोगकर्ता डेटा तालिका से टेक्स्ट को रिच टेक्स्ट एडिटर पर खींचने में सक्षम है।

_dtFields एक डेटा तालिका है जिसमें प्लेसहोल्डर टेक्स्ट और संबंधित छद्म डेटा होता है, मेरी समस्या यह है कि चेक स्थिति परिवर्तन पर, मैं संपूर्ण डेटा तालिका के माध्यम से लूप करता हूं यह देखने के लिए कि क्या समृद्ध टेक्स्ट एडिटर में प्लेसहोल्डर टेक्स्ट है bChecked = true या यदि संपादक में छद्म डेटा है bChecked = false । क्या मैंने यहां जो किया है उसके अलावा छद्म डेटा के साथ प्लेसहोल्डर मानों को स्वैप करने का एक और अधिक प्रभावी तरीका है?

private void ViewMergedData(System.Boolean bChecked)
        {
            foreach (DataRow dr in _dtFields.Rows)
            {
                System.String sFieldName = "<<" + dr["fldFieldName"].ToString() + ">>";
                System.String sPsuedoData = dr["fldData"].ToString();

                //Check for fields on the document
                if (bChecked == true)
                {
                    //Replace with psuedo data
                    if (this.recEmailDesigner.Document.Text.Contains(sFieldName))
                    {
                        this.recEmailDesigner.Document.Text.Replace(sFieldName, sPsuedoData);
                    }
                }
                //Check for psuedo data on the document
                else if (this.recEmailDesigner.Document.Text.Contains(sPsuedoData))
                {
                    //replace with field name
                    this.recEmailDesigner.Document.Text.Replace(sPsuedoData, sFieldName);
                }
            }
        }
2
TheChannels 8 जिंदा 2020, 12:26

1 उत्तर

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

आप अपने sFieldName और sPseudoData वेरिएबल्स को दो स्ट्रिंग्स के डायनामिक ऐरे से बदल सकते हैं, फिर bChecked पर आधारित इंडेक्स का उपयोग करके "इन" और "आउट" स्ट्रिंग चुनें। तब आपको अपने कोड का केवल एक 'उदाहरण' चाहिए जो परीक्षण और प्रतिस्थापन करता है:

    private void ViewMergedData(System.Boolean bChecked)
    {
        int index = bChecked ? 0 : 1;
        foreach (DataRow dr in _dtFields.Rows)
        {
            System.String[] sInOut =
            {
                "<<" + dr["fldFieldName"].ToString() + ">>", // [0] - was sFieldName
                dr["fldData"].ToString()                     // [1] - was sPseudoData
            };
            // Check for field name OR pseudo data on the document
            if (this.recEmailDesigner.Document.Text.Contains(sInOut[index]))
            {
                // Replace with psuedo data OR field name
                this.recEmailDesigner.Document.Text.Replace(sInOut[index], sInOut[1 - index]);
            }
        }
    }

इस i और 1 - i "स्विच-बैक" का उपयोग C और C++ कोडिंग में एक सामान्य प्रतिमान है, लेकिन हो सकता है C# (जिस भाषा में मैं बहुत कम अनुभवी हूं) में समान कुछ के लिए अधिक पारंपरिक और/या कुशल तरीका।

0
Adrian Mole 8 जिंदा 2020, 11:18