В чем проблема в этой функции C # - PullRequest
0 голосов
/ 15 сентября 2009

Я написал следующую функцию для выбора числовой строки, например, 1,23,000.00 В веб-браузере я перехватываю событие Double_Click и затем передаю выбранный диапазон в функцию ниже.

Допустим, начальный выбор был 000, и моя цель - выбрать всю строку, как указано выше.

myRange=doc.selection.createRange()
myRange=SelectCSNumbers(myRange)

Я возвращаю объект Range из функции ниже. Проблема здесь

return tmpRange.duplicate();//here it should terminate
count++;

когда я возвращаю последний диапазон, этот метод вызывается снова Как я не знаю, может ли кто-нибудь указать на мою ошибку.

private mshtml.IHTMLTxtRange SelectCSNumbers(mshtml.IHTMLTxtRange myRange)
        {
            mshtml.IHTMLTxtRange tmpRange = myRange.duplicate();
            string[] strInt = tmpRange.text.Split(',');
            bool result = false;
            result = CheckText(tmpRange, strInt, result);

            if (result && count==0)//
            {

                //Expand the Range with a single Character
                tmpRange.expand("character");

                if (tmpRange.text.Length > myRange.text.Length)
                {
                    if (tmpRange.text.IndexOf(' ') == -1)  //if no space is found that means the selection is not proper 
                    {
                        //Check for ,/.
                        if (tmpRange.text.IndexOf(',') == -1)//if NO Comma is found
                        {
                            if (tmpRange.text.IndexOf('.') == -1)
                            {
                                //EOS
                            }
                            else
                            {
                                //. is found

                                SelectCSNumbers(tmpRange.duplicate());
                            }
                        }
                        else
                        {

                            SelectCSNumbers(tmpRange.duplicate());
                        }

                    }
                    else if (tmpRange.text.IndexOf(' ') != -1)
                    {
                        tmpRange = myRange.duplicate();
                        tmpRange.moveStart("character", -1);
                        if (tmpRange.text.IndexOf(' ') == -1)  //if no space is found that means the selection is not proper 
                        {
                            //Check for ,/.
                            if (tmpRange.text.IndexOf(',') == -1)//if NO Comma is found
                            {
                                if (tmpRange.text.IndexOf('.') == -1)
                                {
                                    //EOS
                                }
                                else
                                {
                                    //. is found

                                    SelectCSNumbers(tmpRange.duplicate());
                                }
                            }
                            else
                            {

                                SelectCSNumbers(tmpRange.duplicate());
                            }
                        }

                    }

                }
                else if (tmpRange.text.Length == myRange.text.Length)
                {
                    tmpRange = myRange.duplicate();
                    tmpRange.moveStart("character", -1);
                    if (tmpRange.text.Length == myRange.text.Length)
                    {
                        //tmpRange = null;
                        return tmpRange.duplicate();//here it should terminate
                        count++;
                    }
                    else if (tmpRange.text.IndexOf(' ') == -1)  //if no space is found that means the selection is not proper 
                    {
                        if (tmpRange.text.IndexOf(',') == -1)//if NO Comma is found
                        {
                            if (tmpRange.text.IndexOf('.') == -1)
                            {
                                //EOS
                            }
                            else
                            {
                                //. is found

                                SelectCSNumbers(tmpRange.duplicate());
                            }
                        }
                        else
                        {

                            SelectCSNumbers(tmpRange.duplicate());
                        }
                    }

                }
            }
            return tmpRange.duplicate();
        }

Ответы [ 2 ]

2 голосов
/ 15 сентября 2009

Это не помогает сразу, но решает большую проблему

Этот код необходимо реорганизовать. Это создаст вам проблемы в будущем. У вас есть скопированный код, о котором вам будет сложно позаботиться. А также, это мешает другим помогать.

Вот предложение по рефакторингу (не проверено)

    private mshtml.IHTMLTxtRange SelectCSNumbers(mshtml.IHTMLTxtRange myRange)
    {
        mshtml.IHTMLTxtRange tmpRange = myRange.duplicate();
        string[] strInt = tmpRange.text.Split(',');
        bool result = false;
        result = CheckText(tmpRange, strInt, result);

        if (result && count==0)//
        {

            //Expand the Range with a single Character
            tmpRange.expand("character");

            if (tmpRange.text.Length > myRange.text.Length)
            {
                if (tmpRange.text.IndexOf(' ') == -1)  //if no space is found that means the selection is not proper 
                {

                    SomeOtherFunction(tmpRange);
                }
                else if (tmpRange.text.IndexOf(' ') != -1)
                {
                    tmpRange = myRange.duplicate();
                    tmpRange.moveStart("character", -1);

                    SomeOtherFunction(tmpRange);

                }

            }
            else if (tmpRange.text.Length == myRange.text.Length)
            {
                tmpRange = myRange.duplicate();
                tmpRange.moveStart("character", -1);
                if (tmpRange.text.Length == myRange.text.Length)
                {
                    //tmpRange = null;
                    return tmpRange.duplicate();//here it should terminate
                    count++;
                }
                else if (tmpRange.text.IndexOf(' ') == -1)  //if no space is found that means the selection is not proper 
                {
                    SomeOtherFunction(tmpRange);
                }

            }
        }
        return tmpRange.duplicate();
    }


    private void SomeOtherFunction(mshtml.IHTMLTxtRange tmpRange)
    {
        if (tmpRange.text.IndexOf(',') == -1)//if NO Comma is found
        {
            if (tmpRange.text.IndexOf('.') == -1)
            {
                //EOS
            }
            else
            {
                //. is found

                SelectCSNumbers(tmpRange.duplicate());
            }
        }
        else
        {

            SelectCSNumbers(tmpRange.duplicate());
        }
    }
1 голос
/ 15 сентября 2009

Случайная догадка:

if (tmpRange.text.Length == myRange.text.Length)
{
    count++;
    return tmpRange.duplicate();
}

Если вы поставите count++ после оператора return, он никогда не будет выполнен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...