从c#中的富文本框中替换一行

时间:2011-11-29 02:19:25

标签: c# replace richtextbox line

所以我试图在visual studio 2010中的富文本框中替换一行。对于一个项目,我正在创建一个菜单系统,当一个项目被选中时,我需要更新显示数量的文本框那个项目。我不知道项目在列表中的具体位置,并且可能有多个项目显示相同的数字,因此我无法使用.replace方法。我可以得到项目所在的行号,但是当我尝试使用我用来查找行号的索引时,我得到一个错误,说“StartIndex不能小于零”。这是我到目前为止的代码:

//跟踪每个项目的数量

    int[] mainItems = new int[10];

    //function for menu item buttons
    private void MenuButtonClick(object sender, EventArgs e)
    {
        int index = 0;
        Button btn = (Button)sender;
        string s = btn.Name.ToString();
        //if item doesnt already exist on order
        if (!textBoxItems.Text.Contains(s))
        {
            textBoxItems.Text += "\r\n• " + s;
            //track num of each item
            switch (s)
            {
                case "Tiramisu": mainItems[0]++;
                    break;
                case "Lazania": mainItems[1]++;
                    break;

            }
            textBoxCount.Text += "\r\n(1)";
        }
        else
        {
            int itemID = 0;
            switch (s)
            {
                case "Tiramisu": mainItems[0]++;
                    itemID = 0;
                    break;
                case "Lazania": mainItems[1]++;
                    itemID = 1;
                    break;

            }

           int lastIndex = 0;
            //get line number of item
            do
            {
                index = textBoxItems.Find(s, index + 1, RichTextBoxFinds.MatchCase);
                if (index != -1)
                {
                    lastIndex = index;
                }
            } while ((index != -1));
            //int lineNum = textBoxItems.GetLineFromCharIndex(index);
            //MessageBox.Show("" + lineNum);

            textBoxCount.Text.Remove(lastIndex, 2);
            textBoxCount.Text.Insert(lastIndex, "(" + mainItems[itemID] + ")");

        }

任何帮助表示赞赏!提前谢谢

1 个答案:

答案 0 :(得分:0)

问题是你循环到index == -1

while ((index != -1));

然后立即使用该索引

int lineNum = textBoxItems.GetLineFromCharIndex(index);

我不确定while循环的逻辑究竟是什么,但乍一看,如果index == -1,你可能想要突破。或者跟踪循环外的最后一个非负指数。

<强>更新

要查找用户刚刚单击的项目,您需要更改循环以记录最后一个非-1的索引。 while循环的目的是查找s的最后一次出现,但是你必须在一个单独的变量中记录最后一次有效的出现(下面代码中的lastIndex)。您还必须在循环完成后测试实际发现的内容。

以下是我将如何实现此逻辑:

        int lastIndex = -1;

        //get line number of item
        do
        {
            index = textBoxItems.Find(s, index + 1, RichTextBoxFinds.MatchCase);
            if (index != -1) {
               lastIndex = index;
            }
        } while ((index != -1));
        if (lastIndex !+ -1) {
            int lineNum = textBoxItems.GetLineFromCharIndex(lastIndex);
            //messageBox.Show(""+lineNum);
            textBoxCount.Text.Remove(lastIndex, 3);
            textBoxCount.Text.Insert(lastIndex, "(" + mainItems[itemID] + ")");
        }