0

実際の作成者名はPolarBearです。

私の関数が検索PolarBearし、結果PolarBearが思い通りに強調表示されました。

検索したところPolarbear、結果に表示されましたが、思い通りにハイライト表示されませんでした。polarbearpoLarbearPolarBear

検索のように強調表示の大文字と小文字を区別しないようにするにはどうすればよいですか?ありがとうございました。

ハイライトコード:

    private void searchComByAuthor()
    {
        // Process the list of files found in the directory. 
        string[] fileEntries = Directory.GetFiles(sourceDirXML);
        foreach (string fileName in fileEntries)
        {
            XmlDocument xmlDoc = new XmlDocument(); //* create an xml document object.

            string docPath = fileName;

            xmlDoc.Load(docPath); //* load the XML document from the specified file.

            XmlNodeList nodeList = xmlDoc.GetElementsByTagName("item");

            foreach (XmlNode node in nodeList)
            {

                XmlElement itemElement = (XmlElement)node;

                string itemAuthor = itemElement.GetElementsByTagName("author")[0].InnerText;

                if (itemAuthor.ToLower() == txtComAuthor.Text.ToString().ToLower())
                {
                    string itemTitle = itemElement.GetElementsByTagName("title")[0].InnerText;
                    string itemDate = itemElement.GetElementsByTagName("pubDate")[0].InnerText;
                    string itemDescription = itemElement.GetElementsByTagName("description")[0].InnerText;
                    string itemXMLFile = Path.GetFileNameWithoutExtension(fileName);

                    richComByTemplate.AppendText("SYMBOL: " + itemXMLFile + "\nAUTHOR: " + itemAuthor + "\nDATE: " + itemDate +
                                                "\nTITLE: " + itemTitle + "\nDESCRIPTION: " + itemDescription + "\n\n--------\n\n");
                }
            }
        }

        int pointer = 0;
        int index = 0;
        string keyword = txtComAuthor.Text;
        string shadow = richComByTemplate.Text;

        while (true)
        {
            //Searching in the copy/shadow
            index = shadow.IndexOf(keyword, pointer);
            //if keyword not found then the loop will break
            if ((index == -1) || (String.IsNullOrEmpty(keyword)))
            {
                break;
            }
            richComByTemplate.Select(index, keyword.Length);
            richComByTemplate.SelectionColor = Color.Red;
            richComByTemplate.SelectionFont = new System.Drawing.Font(richComByTemplate.Font, FontStyle.Bold);
            pointer = index + keyword.Length;
        }
4

2 に答える 2

2

および変数.ToLower()を設定するときに追加します。次に、強調表示が期待どおりに機能するはずです。keywordshadow

string keyword = txtComAuthor.Text.ToLower();
string shadow = richComByTemplate.Text.ToLower();

IndexOfまたは、大文字と小文字を区別しないように指示することもできます。

index = shadow.IndexOf(keyword, pointer, StringComparison.OrdinalIgnoreCase); 
于 2012-08-21T02:02:58.267 に答える
1

StringComparison列挙を使用するIndexOfメソッドのオーバーロードを使用してみることができます。

index = shadow.IndexOf(keyword, pointer,StringComparison.InvariantCultureIgnoreCase); 

2番目のMSDNリンクから:

String.Compare、String.Equals、String.IndexOfなどの文字列比較メソッドを呼び出す場合は、メソッドが実行する比較のタイプを指定できるように、StringComparisonタイプのパラメーターを含むオーバーロードを常に呼び出す必要があります。詳細については、.NETFrameworkで文字列を使用するためのベストプラクティスを参照してください。

小さな作業テストの例:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        int pointer = 0;
        int index = 0;
        string keyword = txtComAuthor.Text;
        string shadow = richComByTemplate.Text;

        while (true)
        {
            //Searching in the copy/shadow 
            index = shadow.IndexOf(keyword, pointer, StringComparison.InvariantCultureIgnoreCase);
            //if keyword not found then the loop will break 
            if ((index == -1) || (String.IsNullOrEmpty(keyword)))
            {
                break;
            }
            richComByTemplate.Select(index, keyword.Length);
            richComByTemplate.SelectionColor = Color.Red;
            richComByTemplate.SelectionFont = new System.Drawing.Font(richComByTemplate.Font, FontStyle.Bold);
            pointer = index + keyword.Length;
        } 

    }
}
于 2012-08-21T02:04:10.310 に答える