5

私がやろうとしているのは、winform アプリケーションで使用した Web ブラウザー コントロールに存在する間違ったスペルに赤い点線の下線を付けることです。

これが私のコードスニペットです:-

    public static string CheckSpelling(string InnerHTML)
    {
        string Val = "";
        try
        {
            StringBuilder strBu = new StringBuilder();
            strBu.Append(InnerHTML);
            RemoveStyleAssigned(ref strBu);                               
            for (int i = 0; i < strBu.Length; i++)
            {
                if (Convert.ToString(strBu[i]).ToLower() == "<")
                {
                    for (int j = i + 1; j < strBu.Length; j++)
                    {                            
                        if (Convert.ToString(strBu[j]).ToLower() == ">")
                        {
                            i = j;
                            for (int k = j + 1; k < strBu.Length; k++)
                            {
                                if (Convert.ToString(strBu[k]).ToLower() != " ")
                                {
                                    i = k;
                                    CheckAndReplace(ref strBu, ref i);
                                    break;
                                }
                            }
                            break;
                        }
                    }
                }
                else if (Convert.ToString(strBu[i]).ToLower() != " ")
                {
                    CheckAndReplace(ref strBu, ref i);                        
                }
            }
            Val = strBu.ToString();
        }
        catch (Exception ex)
        {
        }
        return Val;
    }

ここで、InnerHTML は、入力されたデータに対して取得された Web ブラウザー コントロールの InnerHTML です。次のメソッドは CheckandReplace です

    private static void CheckAndReplace(ref StringBuilder strBu, ref int i)
    {            
        try
        {
            string Target = string.Empty;
            string NewString = "";                
            for (int j = i; j <= strBu.Length; j++)
            {                   
                if (j == strBu.Length || Convert.ToString(strBu[j]).ToLower() == " " || Convert.ToString(strBu[j]).ToLower() == "<" )
                {
                    string Wordtocheck = ReplaceXmlCharacters(Target);
                    if (!IsSpellingCorrect(Wordtocheck))
                    {
                        NewString = "<u style='text-decoration: none; border-bottom: 1px dotted #FF0000'>" + Target + "</u>";                           
                        strBu = strBu.Replace(Target, NewString, i, Target.Length);                            
                        i += NewString.Length - 1;
                    }
                    else
                    {
                        i = j - 1;
                    }

                    break;
                }
                else
                    Target += strBu[j];
            }
        }
        catch (Exception ex)
        {
        }
    }

主な問題は、上記のコードですべてが正常に機能することですが、ターゲット値に特殊文字またはスペースが含まれている場合は常に、上記のコードでも同じことが強調表示されますが、MS Word で行ったように強調表示したくありません。これを案内してください。または、他の方法で解決してください。

前もって感謝します

4

1 に答える 1

0

Regexをチェックしてみてください。あなたが達成しようとしていることに役立つようです。

于 2012-08-02T12:13:10.480 に答える