1

Visual C#.Netでツールを作成しています。ツールのアルゴリズムは、括弧の前後のすべてのスペースをチェックし、見つかったエラーのエラーメッセージを作成することです。例:input is(Text)括弧の前後のスペースが検出されたため、エラーが発生します。
エラーが見つかった場合、コードはlistview1.items()にエラーを追加します。

私の質問をより明確にするために、ここに私のコードがあります:

private void button1_Click(object sender, EventArgs e)
        {
            int error_counter = 0;
            listView1.Items.Clear();

            //requirement 8c
            //check for a space in open and close parenthesis
            Regex test = new Regex(@"\(\s.+\s\)|\[\s.+\s\]|\{\s.+\s\}", RegexOptions.IgnoreCase);
            MatchCollection matchlist = test.Matches(richTextbox1.Text);
            if (matchlist.Count > 0)
            {
                for (int i = 0; i < matchlist.Count; i++)
                {
                    Match firstMatch = matchlist[i];
                    string firstMatch_string = firstMatch.ToString();
                    string[] errors = new string[matchlist.Count];
                    errors[i] = "Ommit Space between a bracket";
                    listView1.Items.Add(errors[i]);
                    error_counter++;
                }
            }
        }

        private void listView1_ItemActivate(object sender, EventArgs e)
        {
            if (listView1.SelectedItems.Count > 0)
            {
                ListViewItem item = listView1.SelectedItems[0];
                MessageBox.Show(item.ToString());
            }
        }

私が探しているのは、listview1のすべてのアイテムがクリック可能であり、ユーザーがクリックした後、ツールがrichtextbox1で見つかったエラーを強調表示することです。

助けてくれてありがとう!

4

2 に答える 2

0

Matchオブジェクト(firstMatchなど)には、IndexとLengthの2つの便利なプロパティがあります。

それらは、元のテキストで問題の試合の位置と長さを示します。あなたの知識では、richTextBoxにハイライトを実装する必要があります!

于 2012-07-24T10:14:20.377 に答える
0

誰かが既に言ったように、Match クラスの Index プロパティと Length プロパティを使用します。これは、奇妙なテキストボックス選択戦略を実装した短い例です。しかし、それは効果的に機能し、概念を示しています。

public partial class Form1 : Form
{
    List<Error> errors = new List<Error>();

    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        errors = new List<Error>();
        listView1.Items.Clear();                                    
        foreach(Match m in Regex.Matches(richTextBox1.Text, @"(\(\s+|\s+\)|\[\s+|\s+\]|\{\s+|\s+\})", RegexOptions.IgnoreCase))
        {                           
            //you may decide to differentiate the msg according to the specific problem
            Error error = new Error(m, "Ommit Space between a bracket");
            this.errors.Add(error);
            listView1.Items.Add(error.msg);                
        }            
    }

    private void listView1_SelectedIndexChanged(object sender, EventArgs e)
    {
        if (listView1.SelectedIndices.Count > 0)
        {
            Error error = errors[listView1.SelectedIndices[0]];
            Select(richTextBox1, error);
        }
    }

    private static void Select(RichTextBox rtb, Error e) {
        string o = rtb.Text;
        rtb.Clear();
        for (int i = 0; i < o.Length; i++)
        {
            if (i >= e.index && i <= e.index + e.length)
            {
                rtb.SelectionColor = Color.White;
                rtb.SelectionBackColor = Color.Red;
            }
            else
            {
                rtb.SelectionColor = Color.Black;
                rtb.SelectionBackColor = Color.White;
            }
            rtb.AppendText(o[i].ToString());
        }
    }              
}

public class Error
{

    public int index;
    public int length;
    public string value;
    public string msg;

    public Error(Match m, string msg)
    {
        this.index = m.Index;
        this.length = m.Length;
        this.value = m.Value;
        this.msg = msg;
    }
}
于 2012-07-24T11:39:31.330 に答える