Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 逐行阅读文本框并将其视为单独的文本_C#_Richtextbox_Shapes_Gdi - Fatal编程技术网

C# 逐行阅读文本框并将其视为单独的文本

C# 逐行阅读文本框并将其视为单独的文本,c#,richtextbox,shapes,gdi,C#,Richtextbox,Shapes,Gdi,这是我用来从RichTexbox文本中绘制矩形的代码: 不要对代码感到头晕目眩,这是一个大纲,主要是问题。但如果您有任何建议,欢迎阅读。 try { pictureBox1.Image = null; bm = new Bitmap(OrgPic.Width, OrgPic.Height); //Location string spli1 = ScriptBox.Text; var p = spli1.Split(

这是我用来从RichTexbox文本中绘制矩形的代码:

不要对代码感到头晕目眩,这是一个大纲,主要是问题。但如果您有任何建议,欢迎阅读。

    try
    {
        pictureBox1.Image = null;
        bm = new Bitmap(OrgPic.Width, OrgPic.Height);

        //Location
        string spli1 = ScriptBox.Text; var p = spli1.Split('(', ')')[1];
        string spli2 = (p.ToString().Split(',', ',')[1]);

        string source = spli2;
        string loc_1 = string.Concat(source.Where(c => !char.IsWhiteSpace(c)));
        string[] coords = loc_1.Split('.');
        Point lp = new Point(int.Parse(coords[0]), int.Parse(coords[1])); ;
        Console_.Text += $"This Lines {ScriptBox.LinesCount}";
        Console_.Text += "\n" + "split1: " + spli1.ToString();
        Console_.Text += "\n" + "split2: " + loc_1.ToString();
        Console_.Text += "\n" + "cords: " + coords.ToString();
        Console_.Text += "\n" + "lp_Point: " + lp.ToString();

        //Color
        string color = ScriptBox.Text; var r = Color.FromName(color.Split('(', ',')[1]);
        string colors = (r.ToString().Split('.', ']')[1]);
        Console_.Text += "\n" + "Color final:" + colors.ToString();
        Console_.Text += "\n" + "Color Sin split:" + r.ToString();



        Color f = Color.FromName(colors);
        Pen pen = new Pen(f);
        pen.Width = 4;
        gF = Graphics.FromImage(bm);
        gF.DrawRectangle(pen, lp.X, lp.Y, 100, 60);
        pictureBox1.Image = bm;

    }
    catch (Exception)
    {

    }
我基本上搜索单词Rect.Draw,然后是颜色。[选定颜色]以及放置矩形的坐标。 问题是,当我遍历整个RichTexbox的函数时,它只绘制了一次矩形,我不知道我是否可以解释自己。范例

代码1:

Rect.Draw (color.red, 90.5)
这将在其各自的位置绘制红色矩形

代码2:

Rect.Draw (color.red, 90.5)
Rect.Draw (color.green, 100.5)
代码2它不绘制两个矩形。只尊重第一个,如果我删除第一个,第二个是唯一有优先权的


显而易见的解决方案:我想知道如何逐行阅读RichTexbox,并将每一行视为单独的文本。因此,按程序绘制每个矩形。

首先,RichTextBox有一个可以使用的
字符串[]行
属性

此外,这似乎是一个基本上要求使用正则表达式(regex)的情况。根据您的代码和字符串魔术的使用,您可能以前没有听说过它,但是regex用于解析字符串和基于模式提取信息。也就是说,基本上就是你在这里要做的

使用System.Text.regular表达式;
部分类Form1:Form
{
Regex-rectRegex=null;
私有void ProcessRtf()
{
//初始化正则表达式一次。
if(rectRegex==null)
rectRegex=newregex(“Rect\.Draw\s*\(color\(?[A-Za-z]+),\s+(?\d+(\.\d+))”;
foreach(ScriptBox.Lines中的字符串行)
{
//例如:line=“Rect.Draw(color.red,90.5)”
var match=rectRegex.match(行);
如果(匹配成功)
{
字符串col=match.Groups[“col”].Value;//col=“red”
字符串pos=match.Groups[“pos”].Value;//pos=“90.5”
//画你的长方形
break;//中止foreach循环。
}
}
}
}

您的代码工作正常,但同样的事情不断发生,函数在编写“Rect.Draw”时忽略行数或次数,仍然只继续绘制它看到的第一行called@Moix哦,我误解了你原来的帖子,因为你只想画第一张。只需删除
中断//中止foreach循环
,它应该可以用于多行。如果它仍然不起作用,可以设置一个断点,看看
line
实际包含的内容,以确保它确实正确地循环行。谢谢,它起作用了。你能给我一个网页或一篇文章来研究正则表达式吗?。非常感谢你的帮助