简体   繁体   English

如何在richTextBox中添加新行?

[英]How do I add a new line to richTextBox?

I have a mouse down event and I'm writing text to richTextBox: 我有一个鼠标按下事件,我正在将文本写入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();
                    }
                }
            }
        }

In the mouse down event I'm writing the location of the rectangle. 在鼠标按下事件中,我正在编写矩形的位置。

Then in the DrawRectangle method I want to display in the richTextBox1 in real time the size of the rectangle: 然后在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();
        }

The problem now is that when i make mouse down left click on mouse button i see the location but then when i move the mouse around drag it around the location line is deleted and i see the size line instead. 现在的问题是,当我按下鼠标左键单击鼠标时,我看到了位置,但是当我左右移动鼠标时,它在位置线周围被拖动了,而我看到了尺寸线。 If in the DrawRectangle method i also make += it's just adding the size line many time fill the whole richTextBox with that when i move/drag the mouse aorund. 如果在DrawRectangle方法中我也使+ =,则只是在我移动/拖动鼠标aorund时多次添加了大小行,从而用整个填满了richTextBox。

You need to append each time. 您需要每次附加。 What you're doing currently is overwriting the text that is already there. 您当前正在做的是覆盖已经存在的文本。

This: 这个:

richTextBox1.Text = "Rectangle Location: " + e.Location + Environment.NewLine;

..says: "The value of the richtextbox text must ONLY be what I've provided. ..说:“ richtextbox文本的值必须仅是我提供的值。

This however: 但是:

richTextBox1.Text += "Rectangle Location: " + e.Location + Environment.NewLine;
//               ^^^^ append

..says: "The richtextbox text must be what it currently is ... plus this extra stuff." ..说:“ richtextbox文本必须是当前的文本……加上这些额外的内容。”

Have a flag variable. 有一个标志变量。

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

First of all I would like to give you some advice. 首先,我想给你一些建议。 When using if statement, it is unneccessary to do if (isCroppedList[listBox1.SelectedIndex] == true) when you can just use if (isCroppedList[listBox1.SelectedIndex] ). 使用if语句时,只需使用if(isCroppedList [listBox1.SelectedIndex]),就不必执行if(isCroppedList [listBox1.SelectedIndex] == true)。 The solution that might be solve your problem could be: Check if the Multiline is set to True,or try richTextBox.AppendText(txt). 可能解决您的问题的解决方案可能是:检查Multiline是否设置为True,或尝试richTextBox.AppendText(txt)。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM