2009-09-15 3 views
0

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

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

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

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

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

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

 
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

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

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

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

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

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

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

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

Смежные вопросы