我如何在for循环中使用时定义RichTextBox数组

poringgunner

活跃成员
已加入
2014年2月23日
留言内容
42
编程经验
Beginner
我有关于如何使用数组的问题。
我想定义一个RichTextbox数组,无论数量如何。
这是我的代码。

                    if(tabControl1.TabPages.Count == browse.FileNames.Count())
                    {
                        for (int i = 0; i < browse.FileNames.Count(); i++)
                        {                         
                            RichTextBox richtext = (RichTextBox)tabControl1.TabPages[i].Controls["richtext" + i.ToString()];

                        }
                        if (richtext.Lines.Count() > richtext.Lines.Count())                        //the error here is the richtext
                        {
                            sub = richtext.Lines.Count() - richtext.Lines.Count();               //and here also.
                        }
                    
                    }

我想在循环上将RichText变量加1
例如richtext1,那么循环后将是richtext2
 
由主持人最后编辑:

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,567
地点
悉尼,澳大利亚
编程经验
10+
我们可以假设每个TabPage都有一个RichTextBox吗?如果是这样,那么您应该做的是使用一个“ foreach”循环枚举TabPage,然后对于每个TabPage,获取其中包含的唯一的RichTextBox。在这种情况下,名称无关紧要。例如。
foreach (TabPage page in tabControl1.TabPages)
{
    var rtb = page.Controls.OfType<RichTextBox>().Single();

    // Use rtb here.
}
 

poringgunner

活跃成员
已加入
2014年2月23日
留言内容
42
编程经验
Beginner
我在窗体中只有tabcontrol和浏览文件按钮。我以编程方式创建了richtextbox。这是我的代码
                foreach (String file in browse.FileNames)
                {
                    //Create Tab control and tab pages
                    TabPage tab = new TabPage() { Text = System.IO.Path.GetFileName(file) };
                    tabControl1.TabPages.Add(tab);
                    tabControl1.SelectedTab = tab;
                    //Create richtextbox                 
                    RichTextBox rich = new RichTextBox { Parent = tab, Dock = DockStyle.Fill, ReadOnly = true };
                    rich.LoadFile(file, RichTextBoxStreamType.PlainText);
                    //Remove the blank lines and comments                
                    rich.Text = Regex.Replace(rich.Text, @"/\*()-_+=,.:;'\[]~`{}|<>*(.*?)\*/", "", RegexOptions.Multiline);
                    rich.Text = Regex.Replace(rich.Text, @"/\*(.*?)\n", "", RegexOptions.Multiline);
                    rich.Text = Regex.Replace(rich.Text, @"//*(.*?)\n", "", RegexOptions.Multiline);
                    rich.Text = Regex.Replace(rich.Text, @"//()-_+=,.:;'\[]~`{}|<>*(.*?)//", "", RegexOptions.Multiline);
                    rich.Text = Regex.Replace(rich.Text, @"^\s*$(\n)", "", RegexOptions.Multiline);
                    RegexOptions options = RegexOptions.None;
                    Regex regex = new Regex(@"[ ]{2,}", options);
                    rich.Text = regex.Replace(rich.Text, @"");

我需要获取要创建的所有richtextboxes的名称。但是我只能获取丰富的名称。
我需要它,因为我将比较richtextboxes中的文本。
 
由主持人最后编辑:

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,567
地点
悉尼,澳大利亚
编程经验
10+
首先,我已经在您的第一篇文章中设置了代码片段的格式,现在我也已经在您的第二篇文章中进行了格式化。如果您要发布代码段,请为我们格式化它们,以使其易于阅读。
我需要获取要创建的所有richtextboxes的名称。但是我只能获取丰富的名称。
我需要它,因为我将比较richtextboxes中的文本。
那只会强化我之前所说的内容。为什么获得名称会帮助您比较RichTextBoxes中的文本?从RichTextBox中获取文本的唯一方法是首先拥有RichTextBox。名称的唯一用途是允许您按名称获取RichTextBox,但在这种情况下,您必须首先拥有RichTextBox才能获取名称,所以为什么要获取名称才能获得一个您已经拥有的RichTextBox?不仅如此,在创建RichTextBoxes时甚至没有给它们命名,因此没有名称可以获取。

我已经向您展示了如何循环获取RichTextBoxes。您可以使用类似的循环将它们添加到数组或集合中,也可以使用LINQ在一行中创建数组或集合,例如
var rtbs = tabControl1.TabPages
                      .Cast<TabPage>()
                      .Select(tp => tp.Controls.OfType<RichTextBox>().Single())
                      .ToArray();
 
最佳 底部