1

現在、2 つのテキスト ファイルを比較する単純な Windows フォーム アプリケーションを作成しています。プログラムは、各テキスト ファイルを ListBox に読み込み、最初の相違点を強調表示します。私が持っている唯一の残りの問題は、垂直スクロールバーに関するものです.大きなテキストファイル(約10000ページ)があるたびに、スクロールバーでドキュメントの最後までスクロールできません(スクロールバーが一番上に戻って毎回特定の位置はありません)。これは、ハイライト効果を実現するために DrawItem を使用したためだと思います。以下は、誰かが私を正しい方向に向けるのに十分なコードの 2 つのスニペットです。そうでない場合は、喜んでさらに投稿します。1 つ目は、2 つのテキスト ファイルを比較する [チェック] ボタンをクリックするためのコードで、2 つ目は DrawItem です。

最初のコード スニペット:

    private void checkButton_Click(object sender, EventArgs e)
    {
        done = false;
        one = 0;
        two = 0;

        try
        {
            var file = File.OpenText(fone.Text);
        }
        catch
        {
            MessageBox.Show("Failed to open:" + fone.Text + ".");
            return;
        }

        try
        {
            var file2 = File.OpenText(ftwo.Text);
        }
        catch
        {
            MessageBox.Show("Failed to open:" + ftwo.Text + ".");
            return;
        }

        string[] msglines;

        msglines = System.IO.File.ReadAllLines(fone.Text);

        foreach (string s in msglines)
        {
            foneBox.Items.Add(s);
            if (TextRenderer.MeasureText(s, myFont).Width > one)
            {
                one = TextRenderer.MeasureText(s, myFont).Width;
            }
        }

        foneBox.HorizontalExtent = one;

        string[] msglines2;

        msglines2 = System.IO.File.ReadAllLines(ftwo.Text);

        foreach (string s in msglines2)
        {
            ftwoBox.Items.Add(s);
            if (TextRenderer.MeasureText(s, myFont).Width > two)
            {
                two = TextRenderer.MeasureText(s, myFont).Width;
            }
        }

        ftwoBox.HorizontalExtent = two;
        int i = 0;

        if (foneBox.Items.Count == ftwoBox.Items.Count)
        {
            while (i < foneBox.Items.Count)
            {
                if (foneBox.Items[i].ToString() == ftwoBox.Items[i].ToString())
                {
                    i++;
                }
                else
                {
                    MessageBox.Show("Files are not equal. The first difference has been highlighted.");
                    done = true;
                    index = i;
                    foneBox.SelectedIndex = i;
                    ftwoBox.SelectedIndex = i;
                    break;
                }
                if (i == foneBox.Items.Count && done==false)
                {
                    MessageBox.Show("Files are equal.");
                }
            }
            i = 0;
        }
        else
        {
            MessageBox.Show("Files are not equal. The files are a different size.");
        }

        foneBox.Focus();
        ftwoBox.Focus();


    }

2 番目のコード スニペット:

    private void foneBox_DrawItem(object sender, DrawItemEventArgs e)
    {

        myColor = Color.Black;
        myFont = new Font(e.Font, FontStyle.Regular);
        using (Brush brush = new SolidBrush(myColor))
        {
            if (e.Index == index && done == true)
            {
                e.Graphics.FillRectangle(new SolidBrush(Color.Yellow), e.Bounds);
                e.Graphics.DrawString(foneBox.Items[e.Index].ToString(), myFont, brush, e.Bounds);
            }
            else
            {
                e.DrawBackground();
                e.Graphics.DrawString(foneBox.Items[e.Index].ToString(), e.Font, new SolidBrush(e.ForeColor), e.Bounds);
            }
        }
    }

どんな助けでも大歓迎です。ありがとうございました。

4

0 に答える 0