2013-04-23 68 views
0

我需要验证的x数量RichTextBox我按动按钮创建。在将内容复制到剪贴板并调用下一个表单之前,我需要确保没有单个RTB为空。验证动态创建的richtextboxes

我试着添加一个布尔变量,但是如果一个空RTB在中间的某个地方,它会被跳过。

这是我现在的代码。任何帮助是极大的赞赏。

List<RichTextBox> rtbs = scrlPanel.Children.OfType<RichTextBox>().ToList(); 
List<TextBlock> texts = scrlPanel.Children.OfType<TextBlock>().ToList(); 
StringBuilder raTemplate = new StringBuilder(); 
//bool flag = true; // True as in It is empty 

foreach (RichTextBox rtb in scrlPanel.Children.OfType<RichTextBox>()) 
{ 
    TextRange txtRange = new TextRange(rtb.Document.ContentStart, rtb.Document.ContentEnd); 
    if (txtRange.Text.Trim() == string.Empty) 
    { 
     MessageBox.Show("Empty fields."); 
     break; 
    } 
    else 
    { 
     foreach (TextBlock txtb in texts) 
     { 
      //RichTextBox rtb = rtbs[texts.IndexOf(txtb)]; 
      //TextRange txtRange = new TextRange(rtb.Document.ContentStart, rtb.Document.ContentEnd); 
      raTemplate.Append(txtb.Text + " " + "::" + Environment.NewLine + txtRange.Text.Trim() + Environment.NewLine); 
     } 
     Clipboard.SetText(raTemplate.ToString()); 
     RA_Email ra = new RA_Email(); 
     ra.raEmail(); 
     //flag = true; 
    } 
} 
+0

如果第三个RTB是空的,例如,您想跳过其余还是跳过第三个RTB?或者你还想撤消前两个? – keyboardP 2013-04-23 16:48:10

+0

几乎你的第一篇文章(代码)解决了我的问题:)但是,是的,我想在代码遇到空RTB时立即丢弃所有内容,无论是在开始,在中间还是在结尾。 – hectormtnezg 2013-04-23 16:57:36

+0

我删除了那篇文章,因为我意识到'txtRange'不会在第一个循环之外存在。转贴了应该与'txtRange'变量一起工作的更新版本:) – keyboardP 2013-04-23 17:07:22

回答

1

复印方面可循环外移动,以确保它只有当所有的RichTextBoxes是空的开始。

bool doCopy = true; 
foreach (RichTextBox rtb in scrlPanel.Children.OfType<RichTextBox>()) 
{ 
    TextRange txtRange = new TextRange(rtb.Document.ContentStart, rtb.Document.ContentEnd); 
    if (txtRange.Text.Trim() == string.Empty) 
    { 
     MessageBox.Show("Empty fields."); 
     doCopy = false; 
     break; 
    } 
} 

if(doCopy) 
{ 
    foreach (TextBlock txtb in texts) 
    { 
     //RichTextBox rtb = rtbs[texts.IndexOf(txtb)]; 
     //TextRange txtRange = new TextRange(rtb.Document.ContentStart, rtb.Document.ContentEnd); 
     raTemplate.Append(txtb.Text + " " + "::" + Environment.NewLine + txtRange.Text.Trim() + Environment.NewLine); 
    } 

    Clipboard.SetText(raTemplate.ToString()); 
    RA_Email ra = new RA_Email(); 
    ra.raEmail(); 
} 
+0

我敢打赌你也会删除这一个:)你发布的这个最新代码实际上是为每个RTB在ScrlPanel中复制了每个TextBlock + RTB。基本上,它复制一个非常大的附加字符串。然而,你的第一个代码完美地工作,我只是添加了第二个txtRange(尽管这不是最好的编程实践):) – hectormtnezg 2013-04-23 17:16:32

+0

@hectormtnezg - 啊没关系。在这种情况下,您可以循环两次RTB集合。一次确保没有任何内容是空的,而下一个则是实际执行复制内容。 (更新答案,希望它能起作用!)。如果没有,我会重新发布第一个:) – keyboardP 2013-04-23 17:23:51

+0

非常感谢您的帮助keyboardP,我建议您重新发布第一个,但我可以将其标记为答案,并提出您的观点,因为这一个和前一个一样,txtRange也需要重新声明。 :) – hectormtnezg 2013-04-23 17:29:32