2009-09-15 9 views
0

J'ai écrit la fonction ci-dessous pour sélectionner une chaîne numérique telle que 1,23,000.00 Dans WebBrowser, je piège Double_Click Event, puis passe la plage sélectionnée à la fonction ci-dessous. Disons que la sélection initiale était 000 et ma cible est de sélectionner la chaîne entière comme mentionné ci-dessus.Quel est le problème dans cette fonction C#

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

Je renvoie un objet Range à partir de la fonction ci-dessous. La question ici est

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

quand je retourne la plage finale cette méthode est appelée à nouveau se Comment je ne sais pas, Quelqu'un peut-il POINTOUT mon erreur.

 
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(); 
     } 

Répondre

2

Cela ne contribue pas immédiatement, mais aborde un problème plus grave

Ce code doit être refondus. Cela vous causera des problèmes sur toute la ligne. Vous avez du code copié-collé qui sera une douleur à prendre soin de. Et aussi, il est plus difficile pour les autres d'aider.

Voici une suggestion pour un refactoring (non testé)

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

deviner au hasard:

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

Si vous mettez count++ après la déclaration return, il ne sera jamais exécuté.

Questions connexes