C# 如何向richTextBox添加新行?

C# 如何向richTextBox添加新行?,c#,.net,winforms,C#,.net,Winforms,我有一个鼠标按下事件,正在向richTextBox写入文本: private void pictureBoxSnap_MouseDown(object sender, MouseEventArgs e) { richTextBox1.Text += "Rectangle Location: " + e.Location + Environment.NewLine; Bitmap bmp; Point pnt;

我有一个鼠标按下事件,正在向richTextBox写入文本:

private void pictureBoxSnap_MouseDown(object sender, MouseEventArgs e)
        {
            richTextBox1.Text += "Rectangle Location: " + e.Location + Environment.NewLine;
            Bitmap bmp;
            Point pnt;

            if (e.Button == MouseButtons.Right)
            {
                cm.Show(pictureBoxSnap, e.Location);

                return;
            }

            if (e.Button == MouseButtons.Left)
            {
                if (checkError(listBox1.SelectedIndex, "pictureBoxSnap_MouseDown") == true) { return; } //if listBox1 empty

                if (isCroppedList[listBox1.SelectedIndex] == true) { return; }

                mouseDown = e.Location;

                if (canDrawNormallyList[listBox1.SelectedIndex] == false)
                {
                    bmp = new Bitmap(pictureBoxSnap.Width - 4, pictureBoxSnap.Height - 4);

                    pnt = PointToScreen(pictureBoxSnap.Location);

                    g = Graphics.FromImage(bmp);

                    g.CopyFromScreen(pnt.X + 2, pnt.Y + 2, 0, 0, new Size(bmp.Width, bmp.Height));

                    g.Dispose();

                    windowsBitmaps[listBox1.SelectedIndex] = bmp;
                }
                else
                {
                    if (thumb != IntPtr.Zero)
                    {
                        MessageBoxButtons buttons = MessageBoxButtons.OK;
                        MessageBoxIcon icon = MessageBoxIcon.Error;

                        MessageBox.Show("ERROR in pictureBoxSnap_MouseDown: thumb != IntPtr.Zero", "ERROR", buttons, icon);

                        this.Close();
                    }
                }
            }
        }
在鼠标按下事件中,我正在写入矩形的位置

然后在DrawRectangle方法中,我想在richTextBox1中实时显示矩形的大小:

private void DrawRectangle(Point pnt)
        {
            g = Graphics.FromImage(img);

            g.Clear(Color.FromKnownColor(KnownColor.Control));

            if (pnt.X == mouseDown.X || pnt.Y == mouseDown.Y)
            {
                g.DrawLine(Pens.Firebrick, mouseDown.X, mouseDown.Y, pnt.X, pnt.Y);
            }
            else
            {
                g.DrawRectangle(Pens.Firebrick, Math.Min(mouseDown.X, pnt.X), Math.Min(mouseDown.Y, pnt.Y),
                            Math.Abs(mouseDown.X - pnt.X), Math.Abs(mouseDown.Y - pnt.Y));
                richTextBox1.Text = "Rectangle Size: " + Math.Abs(mouseDown.X - pnt.X) +
                    Math.Abs(mouseDown.Y - pnt.Y);
            }

            g.Dispose();

            g = frm.CreateGraphics();

            g.DrawImage(img, 0, 0, img.Width, img.Height);

            g.Dispose();
        }

现在的问题是,当我按下鼠标左键单击鼠标按钮时,我会看到位置,但当我移动鼠标并拖动鼠标时,位置线会被删除,而我会看到尺寸线。如果在DrawRectangle方法中,我也会使+=它只是多次添加尺寸线,当我移动/拖动鼠标aorund时,用它填充整个richTextBox。

每次都需要追加。您当前正在做的是覆盖已经存在的文本

这:

…表示:“richtextbox文本的值必须是我提供的值

然而,这是:

richTextBox1.Text += "Rectangle Location: " + e.Location + Environment.NewLine;
//               ^^^^ append
…表示:“richtextbox文本必须是当前的内容。。。加上这个额外的东西。”

有一个标志变量

int flag=0;
if(flag==0)
{
richTextBox1.Text += "Rectangle Location: " + e.Location;
flag++;
}
else
{
richTextBox1.Text += Environment.NewLine + "Rectangle Location: " + e.Location + ;
}

首先,我想给你一些建议。当使用if语句时,当你可以直接使用if时,不需要执行if(isCroppedList[listBox1.SelectedIndex]==true) 如果(isCroppedList[listBox1.SelectedIndex])。
解决问题的解决方案可能是:检查多行是否设置为True,或者尝试richTextBox.AppendText(txt)。

richTextBox1.Text+=“矩形位置:“+e.位置+Environment.NewLine;使用这个语法,它确实添加了两行,但第二行在第一行,第一行在它附近,但在第一行。它没有把它添加到新的行中。例如:Size:22,22 Location:233,44都在第一行。请确保编写
Size
的其他两段代码中也有
+=
。Simon我将位置行移动到了mouse down事件,以便在单击鼠标左键时在richTextBox中显示一次位置。richTextBox1.Text+=“矩形位置:”+e.位置+Environment.NewLine;鼠标按下事件中的同一行。第二行是在DrawRectangle方法中的位置,现在当我点击鼠标左键时,我看到了位置,但当我移动鼠标拖动鼠标时,该行被删除,相反,我看到了DrawRectangle方法中的尺寸线。Simon如果我在第二行中也做了+=它附加了许多行填充的文本线
int flag=0;
if(flag==0)
{
richTextBox1.Text += "Rectangle Location: " + e.Location;
flag++;
}
else
{
richTextBox1.Text += Environment.NewLine + "Rectangle Location: " + e.Location + ;
}